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); }
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(); } } }