Files
0A-KFCommonUtilityLib/KFAttached/KFUtilAttached/WeaponLabelControllerChargeUp.cs
2025-06-04 16:13:32 +09:30

62 lines
1.7 KiB
C#

using System.Collections;
using UnityEngine;
[AddComponentMenu("KFAttachments/Weapon Display Controllers/Weapon Label Controller Charge Up")]
public class WeaponLabelControllerChargeUp : ApexWeaponHudControllerBase
{
[SerializeField, Range(0.001f, 1f)]
protected float tickTime;
[SerializeField, Range(1, 1000)]
protected int updateTicks = 1;
protected Coroutine curChargeProc;
protected bool isChargeRunning = false;
internal void StartChargeUp()
{
if (shaderEnabled && (curChargeProc == null || !isChargeRunning))
curChargeProc = StartCoroutine(ChargeUp());
}
internal void StopChargeUp()
{
if (shaderEnabled && curChargeProc != null)
{
StopCoroutine(curChargeProc);
curChargeProc = null;
isChargeRunning = false;
}
}
protected override void OnDisable()
{
StopChargeUp();
}
private IEnumerator ChargeUp()
{
isChargeRunning = true;
float chargeLeap = (float)dataArray[0] / updateTicks;
int[] chargeArray = new int[4];
float curChargeCount = 0;
dataArray.CopyTo(chargeArray, 0);
int max = dataArray[1];
chargeArray[1] = (int)curChargeCount;
while (chargeArray[1] <= max)
{
Dispatch(chargeArray);
if (chargeArray[1] == max)
break;
yield return new WaitForSecondsRealtime(tickTime);
max = dataArray[1];
curChargeCount += chargeLeap;
chargeArray[1] = Mathf.Min((int)curChargeCount, max);
}
isChargeRunning = false;
yield break;
}
protected override bool CanDispatch()
{
return base.CanDispatch() && !isChargeRunning;
}
}