Esempio n. 1
0
        public override object Interpolate(float t, object currentValue, Lerper.Behavior behavior)
        {
            var x = from.X + range.X * t;
            var y = from.Y + range.Y * t;

            if (behavior.HasFlag(Behavior.Round))
            {
                x = (float)Math.Round(x);
                y = (float)Math.Round(y);
            }

            var current = (Vector2)currentValue;

            if (range.X != 0)
            {
                current.X = x;
            }
            if (range.Y != 0)
            {
                current.Y = y;
            }
            return(current);
        }
Esempio n. 2
0
        private void Update(float elapsed)
        {
            if (firstUpdate)
            {
                firstUpdate = false;

                var i = vars.Count;
                while (i-- > 0)
                {
                    if (lerpers[i] != null)
                    {
                        lerpers[i].Initialize(start[i], end[i], behavior);
                    }
                }
            }
            else
            {
                if (Paused)
                {
                    return;
                }

                if (Delay > 0)
                {
                    Delay -= elapsed;
                    if (Delay > 0)
                    {
                        return;
                    }
                }

                if (time == 0 && timesRepeated == 0 && begin != null)
                {
                    begin();
                }

                time += elapsed;
                float setTimeTo  = time;
                float t          = time / Duration;
                bool  doComplete = false;

                if (time >= Duration)
                {
                    if (repeatCount != 0)
                    {
                        setTimeTo = 0;
                        Delay     = repeatDelay;
                        timesRepeated++;

                        if (repeatCount > 0)
                        {
                            --repeatCount;
                        }

                        if (repeatCount < 0)
                        {
                            doComplete = true;
                        }
                    }
                    else
                    {
                        time = Duration;
                        t    = 1;
                        Remover.Remove(this);
                        doComplete = true;
                    }
                }

                if (ease != null)
                {
                    t = ease(t);
                }

                int i = vars.Count;
                while (i-- > 0)
                {
                    if (vars[i] != null)
                    {
                        vars[i].Value = lerpers[i].Interpolate(t, vars[i].Value, behavior);
                    }
                }

                time = setTimeTo;

                //	If the timer is zero here, we just restarted.
                //	If reflect mode is on, flip start to end
                if (time == 0 && behavior.HasFlag(Lerper.Behavior.Reflect))
                {
                    Reverse();
                }

                if (update != null)
                {
                    update();
                }

                if (doComplete && complete != null)
                {
                    complete();
                }
            }
        }