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 }; 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() { buildingParts = GetComponentsInChildren(); } void Start() { // enemyHandler = FindObjectOfType(); // scoreHandler = FindObjectOfType(); UpdateWeaponParameters(fireRate, projectileSpeed); for (int i = 1; i < buildingParts.Length; i++) { buildingParts[i].gameObject.SetActive(false); } StartCoroutine(Build()); } IEnumerator Build() { for (int i = 1; i < buildingParts.Length; i++) { buildingParts[i].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 void Update() { // ShootProjectile(false); // FindAndShootEnemy(); } // private void FindAndShootEnemy() // { // float bestValue = Mathf.Infinity; // bool targetFound = false; // List 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().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; } } }