99 lines
2.2 KiB
C#
99 lines
2.2 KiB
C#
using System.Collections;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
public class TorpedoAimView : MonoBehaviour
|
||
{
|
||
[SerializeField] private CanvasGroup reloadGroup;
|
||
[SerializeField] private Image reloadBar;
|
||
//[SerializeField] private TextMeshProUGUI ammoLabel;
|
||
|
||
private TorpedoWeapon weapon;
|
||
private bool initialized = false;
|
||
private bool reloadAnimationEnabled;
|
||
|
||
public void Initialilze()
|
||
{
|
||
if (G.WeaponModel.Weapons[0].TryGetComponent(out TorpedoWeapon torpedo))
|
||
{
|
||
weapon = torpedo;
|
||
initialized = true;
|
||
}
|
||
else
|
||
{
|
||
Debug.Log("Не найдено торпедное оружие");
|
||
initialized = false;
|
||
}
|
||
|
||
RefreshAmmo(weapon.Ammo);
|
||
weapon.AmmoChanged += RefreshAmmo;
|
||
}
|
||
|
||
private void OnDestroy()
|
||
{
|
||
if (!initialized) return;
|
||
weapon.AmmoAdded -= RefreshAmmo;
|
||
}
|
||
|
||
private void Update()
|
||
{
|
||
if (!initialized) return;
|
||
Refresh();
|
||
}
|
||
|
||
private void OnEnable()
|
||
{
|
||
reloadGroup.alpha = 0;
|
||
}
|
||
private void OnDisable()
|
||
{
|
||
reloadAnimationEnabled = false;
|
||
}
|
||
|
||
private void Refresh()
|
||
{
|
||
if (weapon.ReloadPercent < 1 && !reloadAnimationEnabled)
|
||
{
|
||
EnableReloadAnimation();
|
||
}
|
||
|
||
if (reloadAnimationEnabled && weapon.ReloadPercent >= 1)
|
||
{
|
||
DisableReloadAnimation();
|
||
}
|
||
}
|
||
|
||
private void RefreshAmmo(int ammo)
|
||
{
|
||
//ammoLabel.text = $"Торпеды: {ammo}";
|
||
}
|
||
|
||
private void EnableReloadAnimation()
|
||
{
|
||
StopAllCoroutines();
|
||
reloadAnimationEnabled = true;
|
||
StartCoroutine(ReloadAnimation());
|
||
}
|
||
|
||
private void DisableReloadAnimation()
|
||
{
|
||
reloadAnimationEnabled = false;
|
||
}
|
||
|
||
IEnumerator ReloadAnimation()
|
||
{
|
||
while (reloadAnimationEnabled)
|
||
{
|
||
reloadGroup.alpha = Mathf.Sin(Time.time * 5) / 2 + 0.5f;
|
||
reloadBar.fillAmount = weapon.ReloadPercent;
|
||
yield return null;
|
||
}
|
||
|
||
while (reloadGroup.alpha > 0)
|
||
{
|
||
reloadGroup.alpha -= Time.deltaTime;
|
||
}
|
||
}
|
||
}
|