55 lines
1.4 KiB
C#
55 lines
1.4 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
public class AirDropManager : MonoBehaviour
|
|
{
|
|
public static UnityEvent<float> AccuracyUpdated;
|
|
|
|
[SerializeField] private int maxTorpedoAmmo;
|
|
[SerializeField] private int maxMissileAmmo;
|
|
|
|
[SerializeField] private int hitsCount;
|
|
[SerializeField] private float accuracy;
|
|
|
|
private GameObject playerGO;
|
|
|
|
private int totalAmmo => maxTorpedoAmmo + maxMissileAmmo;
|
|
public void Init(GameObject player, WeaponModel weaponModel)
|
|
{
|
|
playerGO = player;
|
|
maxTorpedoAmmo = weaponModel.Weapons[0].Ammo;
|
|
maxMissileAmmo = weaponModel.Weapons[1].Ammo;
|
|
hitsCount = 0;
|
|
|
|
Damager.OnCollideHitbox += OnProjectileHit;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
Damager.OnCollideHitbox -= OnProjectileHit;
|
|
}
|
|
|
|
private void OnProjectileHit(GameObject damagerOwner, GameObject hitboxOwner)
|
|
{
|
|
bool shootByPlayer = damagerOwner == playerGO;
|
|
bool hitToEnemy = hitboxOwner.TryGetComponent<EnemyShip>(out _);
|
|
if (shootByPlayer && hitToEnemy)
|
|
{
|
|
hitsCount++;
|
|
UpdateAccuracy();
|
|
}
|
|
}
|
|
|
|
private void OnAirdropConsumed()
|
|
{
|
|
hitsCount = 0;
|
|
UpdateAccuracy();
|
|
}
|
|
|
|
private void UpdateAccuracy()
|
|
{
|
|
accuracy = hitsCount / totalAmmo;
|
|
AccuracyUpdated?.Invoke(accuracy);
|
|
}
|
|
}
|