62 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|