/* * @author Valentin Simonov / http://va.lent.in/ */ using System.Collections.Generic; using TouchScript.Utils; using TouchScript.Pointers; using UnityEngine; namespace TouchScript.Gestures.TransformGestures.Clustered { /// /// TransformGesture which splits all pointers into 2 clusters and works with them. /// Should be used for large touch surfaces. /// [AddComponentMenu("TouchScript/Gestures/Clustered/Transform Gesture (Clustered)")] [HelpURL("http://touchscript.github.io/docs/html/T_TouchScript_Gestures_TransformGestures_Clustered_ClusteredTransformGesture.htm")] public class ClusteredTransformGesture : TransformGesture { #region Private variables private Clusters.Clusters2D clusters = new Clusters.Clusters2D(); #endregion #region Gesture callbacks /// protected override void pointersPressed(IList pointers) { clusters.AddPoints(pointers); base.pointersPressed(pointers); } /// protected override void pointersUpdated(IList pointers) { clusters.Invalidate(); base.pointersUpdated(pointers); } /// protected override void pointersReleased(IList pointers) { clusters.RemovePoints(pointers); base.pointersReleased(pointers); } /// protected override void reset() { base.reset(); clusters.RemoveAllPoints(); } #endregion #region Protected methods /// protected override int getNumPoints() { if (clusters.HasClusters) return 2; if (NumPointers > 0) return 1; return 0; } /// protected override bool relevantPointers1(IList pointers) { return true; } /// protected override bool relevantPointers2(IList pointers) { return true; } /// protected override Vector2 getPointScreenPosition(int index) { if (!clusters.HasClusters) return ClusterUtils.Get2DCenterPosition(activePointers); return clusters.GetCenterPosition(index); } /// protected override Vector2 getPointPreviousScreenPosition(int index) { if (!clusters.HasClusters) return ClusterUtils.GetPrevious2DCenterPosition(activePointers); return clusters.GetPreviousCenterPosition(index); } #endregion } }