/* * @author Valentin Simonov / http://va.lent.in/ */ using System; using System.Collections.Generic; using UnityEngine; namespace TouchScript.Utils { internal sealed class TimedSequence { private List points = new List(); private List timestamps = new List(); public void Add(T element) { Add(element, Time.unscaledTime); } public void Add(T element, float time) { points.Add(element); timestamps.Add(time); } public void Clear() { points.Clear(); timestamps.Clear(); } public IList FindElementsLaterThan(float time) { var list = new List(); for (var i = points.Count - 1; i >= 0; i--) { if (timestamps[i] > time) list.Add(points[i]); else break; } list.Reverse(); return list; } public IList FindElementsLaterThan(float time, out float lastTime) { var list = new List(); var i = points.Count - 1; for (; i >= 0; i--) { if (timestamps[i] > time) list.Add(points[i]); else break; } list.Reverse(); if (i < points.Count - 1) lastTime = timestamps[i + 1]; else lastTime = time; return list; } public IList FindElementsLaterThan(float time, Predicate predicate) { var list = new List(); for (var i = points.Count - 1; i >= 0; i--) { if (timestamps[i] > time) { if (predicate(points[i])) list.Add(points[i]); } else break; } list.Reverse(); return list; } } }