protected override void onFire(Vector2 direction) { ready = false; Callback.CallbackMethod[] modifiers = new Callback.CallbackMethod[_opponents.Count]; for (int i = 0; i < _opponents.Count; i++) { InputToAction input = _opponents[i].GetComponent <InputToAction>(); modifiers[i] = () => input.normalizedMovementInput = -input.normalizedMovementInput; input.PreFixedUpdateDelegates.Add(modifiers[i]); GameObject visuals = SimplePool.Spawn(stunVisualsPrefab); visuals.transform.SetParent(_opponents[i], false); visuals.transform.localPosition = Vector3.zero; SpriteRenderer rend = visuals.GetComponent <SpriteRenderer>(); Callback.DoLerp((float l) => rend.color.setAlphaFloat(l), visualsLerpTime, this); Callback.FireAndForget(() => Callback.DoLerp((float l) => rend.color.setAlphaFloat(l), visualsLerpTime, this, reverse: true), duration - visualsLerpTime, this).FollowedBy(() => SimplePool.Despawn(visuals), this); } Callback.FireAndForget(() => { for (int i = 0; i < _opponents.Count; i++) { _opponents[i].GetComponent <InputToAction>().PreFixedUpdateDelegates.Remove(modifiers[i]); } }, duration, this); }
protected override void onFire(Vector2 direction) { ready = false; Callback.CallbackMethod[] modifiers = new Callback.CallbackMethod[_opponents.Count]; for(int i = 0; i < _opponents.Count; i++) { InputToAction input = _opponents[i].GetComponent<InputToAction>(); modifiers[i] = () => input.normalizedMovementInput = -input.normalizedMovementInput; input.PreFixedUpdateDelegates.Add(modifiers[i]); GameObject visuals = SimplePool.Spawn(stunVisualsPrefab); visuals.transform.SetParent(_opponents[i], false); visuals.transform.localPosition = Vector3.zero; SpriteRenderer rend = visuals.GetComponent<SpriteRenderer>(); Callback.DoLerp((float l) => rend.color.setAlphaFloat(l), visualsLerpTime, this); Callback.FireAndForget(() => Callback.DoLerp((float l) => rend.color.setAlphaFloat(l), visualsLerpTime, this, reverse: true), duration - visualsLerpTime, this).FollowedBy(() => SimplePool.Despawn(visuals), this); } Callback.FireAndForget(() => { for(int i = 0; i < _opponents.Count; i++) _opponents[i].GetComponent<InputToAction>().PreFixedUpdateDelegates.Remove(modifiers[i]);}, duration, this); }
/// <summary> /// Constructs a Countdown that represents a simple timed countdown. /// </summary> /// <param name="code">The code to execute once the Countdown has finished<./param> /// <param name="time">The time the Countdown takes to count down.</param> /// <param name="callingScript">The MonoBehaviour on which to run the Countdown.</param> /// <param name="mode">The time mode to run the Coroutine with.</param> /// <returns>A countdown using a simple timer.</returns> public static Countdown TimedCountdown(Callback.CallbackMethod code, float time, MonoBehaviour callingScript, Callback.Mode mode = Callback.Mode.UPDATE) { return(new Countdown(() => Callback.FireAndForget(code, time, callingScript, mode), callingScript)); }