/* * @author Valentin Simonov / http://va.lent.in/ */ #if TOUCHSCRIPT_DEBUG using System; using System.Collections.Generic; using TouchScript.Debugging.Filters; using TouchScript.Pointers; using TouchScript.Utils; namespace TouchScript.Debugging.Loggers { /// /// A default implementation of used in editor. /// /// public class PointerLogger : IPointerLogger { #region Consts public const int MIN_POINTER_LIST_SIZE = 1000; #endregion #region Public properties /// public int PointerCount { get { return pointerCount; } } #endregion #region Private variables private int pointerCount = 0; private int eventCount = 0; protected List data = new List(1); protected List> events = new List>(1); #endregion #region Public methods /// public virtual void Log(Pointer pointer, PointerEvent evt) { var id = checkId(pointer); var list = getPointerList(id); var log = new PointerLog() { Id = eventCount, Tick = DateTime.Now.Ticks, PointerId = id, Event = evt, State = new PointerState() { Buttons = pointer.Buttons, Position = pointer.Position, PreviousPosition = pointer.PreviousPosition, Flags = pointer.Flags, Target = pointer.GetPressData().Target, TargetPath = TransformUtils.GetHeirarchyPath(pointer.GetPressData().Target), } }; list.Add(log); eventCount++; } /// public virtual List GetFilteredPointerData(IPointerDataFilter filter = null) { //if (filter == null) return new List(data); } /// public virtual List GetFilteredLogsForPointer(int id, IPointerLogFilter filter = null) { if (id < 0 || id >= pointerCount) return new List(); List list = events[id]; if (filter == null) return new List(list); var count = list.Count; List filtered = new List(count); for (var i = 0; i < count; i++) { var item = list[i]; if (filter.Applies(ref item)) filtered.Add(item); } return filtered; } /// public virtual void Dispose() {} #endregion #region Private functions private IList getPointerList(int id) { return events[id]; } private int checkId(Pointer pointer) { var id = pointer.Id; if (id > pointerCount) throw new InvalidOperationException("Pointer id desync!"); if (id != pointerCount) return id; var list = new List(MIN_POINTER_LIST_SIZE); events.Add(list); data.Add(new PointerData() { Id = id, Type = pointer.Type, }); pointerCount++; return id; } #endregion } } #endif