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

100 lines
2.4 KiB
C#

using System.Collections.Generic;
using GameDev.CoreSystems;
using UnityEngine;
namespace AsteroidGame.Entities
{
public class Turret : StructureBase
{
[Header("WeaponParameters")]
[SerializeField] private int _damage = 1;
[SerializeField] private float _fireRate = 1;
[SerializeField] private float _projectileSpeed = 5;
[field: Header("Stats")]
[field: SerializeField] public float Kills { get; set; }
[field: SerializeField] public float DamageDealt { get; set; }
[field: Header("Weapon")]
[field: SerializeField] public List<Weapon> Weapons { get; set; }
[field: Header("Targeter")]
[field: SerializeField] public Targeter Targeter { get; set; }
protected override void OnEnable()
{
base.OnEnable();
InitializeTargeter();
}
private void InitializeTargeter()
{
Targeter.SetParent(Targetable);
}
private void Update()
{
HandleWeapon();
HandleStats();
}
#region Weapon
private void HandleWeapon()
{
if (!powerSystem.PowerLost)
{
if (Targeter.FoundTarget())
{
FireWeapons();
}
else
{
TurnOffWeapons();
}
}
else
{
TurnOffWeapons();
}
}
private void FireWeapons()
{
powerSystem.SetCurrentPower(powerSystem.GetMaxPower());
foreach (var weapon in Weapons)
{
weapon.PivotPoint.transform.LookAt(Targeter.GetTarget().GetCenterPosition());
weapon.FireWeapon = true;
}
}
private void TurnOffWeapons()
{
//powerSystem.SetCurrentPower(0);
foreach (var weapon in Weapons)
{
weapon.FireWeapon = false;
}
}
#endregion
#region Stats
private void HandleStats()
{
Kills = 0;
DamageDealt = 0;
foreach (var weapon in Weapons)
{
Kills += weapon.NumberOfKills;
DamageDealt += weapon.DamageDealt;
}
}
#endregion
}
}