sea-battle-vr/Assets/Scripts/Gameplay/AirDropManager.cs

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);
}
}