// External public void SetFlag(EWeaponFlag inFlag, bool inState, float inDuration = 0.0f, bool inNetTransfer = false) { if (inNetTransfer) { photonView.RPC("NetSetFlag", PhotonTargets.All, inFlag, inState, inDuration); } else { NetSetFlag(inFlag, inState, inDuration); } }
void NetSetFlag(EWeaponFlag inFlag, bool inState, float inDuration = 0.0f) { _flags[inFlag] = inState; // Start a duration coroutine, and overwrite any earlier duration coroutine of the same type if (inDuration > 0) { _flagHandles[inFlag] = Timing.RunCoroutineSingleton(HandleDuration(inFlag, inDuration, inState), _flagHandles[inFlag], SingletonBehavior.Overwrite); } // If the flag is set without a duration and a duration coroutine is going, kill the coroutine else { Timing.KillCoroutines(_flagHandles[inFlag]); } }
IEnumerator <float> HandleDuration(EWeaponFlag inFlag, float inDuration, bool inState) { yield return(Timing.WaitForSeconds(inDuration)); SetFlag(inFlag, !inState); }
public bool GetFlag(EWeaponFlag inFlag) { return(_flags[inFlag]); }