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);
    }
Exemple #3
0
 /// <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));
 }