/// <summary> /// Updates this tween given a timespan. /// </summary> /// <param name="timeSpan">Time to update.</param> public void Update(TimeSpan timeSpan) { var notify = false; if (!IsComplete) { CurrentTime += timeSpan; _value = MathHelper.Clamp((float)(CurrentTime.TotalMilliseconds / TotalTime.TotalMilliseconds), 0.0f, 1.0f); for (var index = 0; index < EventListeners.Count; index++) { if (!(Value >= EventListeners[index].Time) || EventListeners[index].Fired) { continue; } EventListeners[index] = new EvenTimer { Time = EventListeners[index].Time, Procedure = EventListeners[index].Procedure, Fired = true }; EventListeners[index].Procedure(this); } } else if (Loop) { notify = true; Reset(); _positveDirection = !_positveDirection; } else { notify = true; } if (!notify) { return; } var remove = new List <Procedure <Tween> >(); foreach (var listener in CompletionListeners) { try { listener(this); } catch { remove.Add(listener); } } CompletionListeners.RemoveAll(remove.Contains); remove.Clear(); }
/// <summary> /// Resets this tween to it origianal value. /// </summary> public void Reset() { _value = 0.0f; CurrentTime = TimeSpan.Zero; for (var index = 0; index < EventListeners.Count; index++) { EventListeners[index] = new EvenTimer { Time = EventListeners[index].Time, Procedure = EventListeners[index].Procedure, Fired = false }; } }