using AsteroidGame.Entities.Enemies.Scripts; using UnityEngine; namespace AsteroidGame.Entities { public class Turret : StructureBase { [Header("WeaponParameters")] [SerializeField] private float _weaponRange = 40f; [SerializeField] private int _damage = 1; [SerializeField] private float _fireRate = 1; [SerializeField] private float _projectileSpeed = 5; [SerializeField] private TargetStrategy _targetStrategy = TargetStrategy.LowestHealth; [Header("Stats")] [SerializeField] private float _score = 0f; [Header("RigConnections")] [SerializeField] private Transform _turretHead; [SerializeField] private Transform _barrel; #region Privates [SerializeField] private enum TargetStrategy { ClosestEnemy, LowestHealth }; [SerializeField] private EnemyBase _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(); } private void Start() { // enemyHandler = FindObjectOfType(); // scoreHandler = FindObjectOfType(); UpdateWeaponParameters(_fireRate, _projectileSpeed); } private void Update() { _turretHead.transform.LookAt(_targetEnemy.GetCenterPosition()); } 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 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); // } // } } }