AsteroidGame/Assets/Entities/Structures/Tower/Turret.cs

147 lines
4.3 KiB
C#

using System.Collections;
using AsteroidGame.Entities.Structures.Scripts;
using UnityEngine;
namespace AsteroidGame.Entities.Structures.Tower
{
public class Turret : StructureBase
{
[Header("WeaponParameters")] [SerializeField]
float weaponRange = 40f;
[SerializeField] int damage = 1;
[SerializeField] float fireRate = 1;
[SerializeField] float projectileSpeed = 5;
[SerializeField] TargetStrategy targetStrategy = TargetStrategy.LowestHealth;
[Header("Stats")]
[SerializeField] float score = 0f;
[Header("RigConnections")]
[SerializeField] Transform _turretHead;
[SerializeField] Transform _barrel;
#region Privates
[SerializeField]
enum TargetStrategy
{
ClosestEnemy,
LowestHealth
};
[SerializeField] private GameObject targetEnemy;
[SerializeField] private Transform[] buildingParts;
#endregion
#region Publics
public float MaxDistance { get; set; }
public int Damage
{
get => damage;
set => damage = value;
}
public int FireRate { get; set; }
#endregion
private void Awake()
{
targetEnemy = FindObjectOfType<CameraController>().gameObject;
}
void Start()
{
// enemyHandler = FindObjectOfType<EnemyHandler>();
// scoreHandler = FindObjectOfType<ScoreHandler>();
UpdateWeaponParameters(fireRate, projectileSpeed);
}
void Update()
{
_turretHead.transform.LookAt(targetEnemy.transform.position);
}
IEnumerator Build()
{
foreach (var buildingPart in buildingParts)
{
buildingPart.gameObject.SetActive(true);
yield return new WaitForSeconds(buildTimer);
}
}
private void UpdateWeaponParameters(float _fireRate, float _projectileSpeed)
{
// var main = _projectile.main;
// main.startSpeed = _projectileSpeed;
//
// var emission = _projectile.emission;
// emission.rateOverTime = _fireRate;
}
// Update is called once per frame
// private void FindAndShootEnemy()
// {
// float bestValue = Mathf.Infinity;
// bool targetFound = false;
// List<GameObject> enemies = enemyHandler.ReturnAllEnemies();
//
// foreach (GameObject enemy in enemies)
// {
// float distanceToTarget = Vector3.Magnitude(enemy.transform.position - transform.position);
//
// bool withinRange = distanceToTarget < weaponRange;
// if (withinRange)
// {
// if (targetStrategy == TargetStrategy.ClosestEnemy)
// {
// bool isClosest = distanceToTarget < bestValue;
// if (isClosest)
// {
// targetFound = true;
// bestValue = distanceToTarget;
// targetEnemy = enemy;
// }
// }
// if (targetStrategy == TargetStrategy.LowestHealth)
// {
// float enemyHealth = enemy.GetComponent<EnemyHealth>().Health;
//
// bool isLowestHealth = enemyHealth < bestValue;
// if (isLowestHealth)
// {
// targetFound = true;
// bestValue = enemyHealth;
// targetEnemy = enemy;
// }
// }
// }
// }
//
// if (targetFound)
// {
// weapon.transform.LookAt(targetEnemy.transform.position);
// ShootProjectile(true);
// }
// }
void ShootProjectile(bool _state)
{
// var emissionModule = _projectile.emission;
// emissionModule.enabled = _state;
}
public void UpdateScore(float _score)
{
score += _score;
}
}
}