Beispiel #1
0
    public static async Task Animate(float duration, TimingFunction timing, Func <float, AnimationStep> update)
    {
        var elapsed = 0f;
        await Util.EveryFrame(deltaT =>
        {
            var time = Mathf.Clamp(elapsed + deltaT, 0, duration);
            var step = update(timing(time));

            switch (step)
            {
            case AnimationStep.Stop: return(false);

            case AnimationStep.Skip: return(true);

            case AnimationStep.Continue:
                if (time >= duration)
                {
                    return(false);
                }
                elapsed = time;
                return(true);

            default: throw new ArgumentOutOfRangeException();
            }
        });

        update(1);
    }
Beispiel #2
0
    private async Task Animate(GameObject target, Vector2 delta, TimingFunction timing)
    {
        var p0 = target.transform.localPosition;
        var p1 = p0 + (Vector3)delta;

        var anim = Animations.Animate(animationTime, timing);

        while (!anim.isComplete)
        {
            await anim.NextFrame();

            target.transform.localPosition = Vector3.Lerp(p0, p1, anim.progress);
        }
    }
Beispiel #3
0
    private async Task Fade(Image target, float alpha, float timeMultiplier, TimingFunction timing)
    {
        var c0 = target.color;
        var c1 = c0;

        c1.a = alpha;

        var anim = Animations.Animate(animationTime * timeMultiplier, timing);

        while (!anim.isComplete)
        {
            await anim.NextFrame();

            target.color = Color.Lerp(c0, c1, anim.progress);
        }
    }
Beispiel #4
0
 public static Animation Animate(float duration, TimingFunction timing)
 {
     return(new Animation(duration, timing));
 }
Beispiel #5
0
 public Animation(float duration, TimingFunction timing)
 {
     this.duration = duration;
     this.timing   = timing;
 }
Beispiel #6
0
 /// <inheritdoc />
 public string TimingFunctions(TimingFunction timingFunction)
 {
     return(_timingMap[timingFunction]);
 }
Beispiel #7
0
    public void TrackStateChange(State <T> oldState, State <T> newState)
    {
        if (TrackChanges)
        {
            if (oldState != null)
            {
                StateChangeRecord <T> record = new StateChangeRecord <T>(oldState.Name, newState.Name, TimingFunction.Invoke());

                StateChanges.Add(record);
            }
        }
    }