protected virtual FingerGestures.IFingerList GetTouches(T gesture) { if (SupportFingerClustering && ClusterManager) { FingerClusterManager.Cluster cluster = ClusterManager.FindClusterById(gesture.ClusterId); return((cluster != null) ? cluster.Fingers : EmptyFingerList); } return(FingerGestures.Touches); }
protected override TapGesture MatchActiveGestureToCluster(FingerClusterManager.Cluster cluster) { if (IsMultiTap) { TapGesture gesture = FindClosestPendingGesture(cluster.Fingers.GetAveragePosition()); if (gesture != null) { return(gesture); } } return(base.MatchActiveGestureToCluster(cluster)); }
protected override TapGesture MatchActiveGestureToCluster(FingerClusterManager.Cluster cluster) { if (IsMultiTap) { TapGesture gesture = FindClosestPendingGesture(cluster.Fingers.GetAveragePosition()); if (gesture != null) { // Debug.Log( "Using existing tap gesture for new cluster" ); return(gesture); } } return(base.MatchActiveGestureToCluster(cluster)); }
void UpdateUsingClusters() { // force cluster manager to update now (ensures we have most up to date finger state) ClusterManager.Update(); foreach (FingerClusterManager.Cluster cluster in ClusterManager.Clusters) { ProcessCluster(cluster); } foreach (T g in gestures) { FingerClusterManager.Cluster cluster = ClusterManager.FindClusterById(g.ClusterId); FingerGestures.IFingerList touches = (cluster != null) ? cluster.Fingers : EmptyFingerList; UpdateGesture(g, touches); } }
protected virtual void ProcessCluster(FingerClusterManager.Cluster cluster) { // this cluster already has a gesture associated to it if (FindGestureByCluster(cluster) != null) { return; } // only consider clusters that match our gesture's required finger count if (cluster.Fingers.Count != RequiredFingerCount) { return; } // give a chance to an active gesture to claim that cluster T gesture = MatchActiveGestureToCluster(cluster); // found an active gesture to rebind the cluster to if (gesture != null) { //Debug.Log( "Gesture " + gesture + " claimed finger cluster #" + cluster.Id ); // reassign cluster id gesture.ClusterId = cluster.Id; } else { // no claims - find an inactive gesture gesture = FindFreeGesture(); // out of gestures if (gesture == null) { return; } // did we recognize the beginning a valid gesture? if (!CanBegin(gesture, cluster.Fingers)) { return; } Begin(gesture, cluster.Id, cluster.Fingers); } }
// use the finger clusters as touch list sources (used for handling simultaneous multi-finger gestures) void UpdateUsingClusters() { // force cluster manager to update now (ensures we have most up to date finger state) ClusterManager.Update(); for (int i = 0; i < ClusterManager.Clusters.Count; ++i) { ProcessCluster(ClusterManager.Clusters[i]); } for (int i = 0; i < gestures.Count; ++i) { T g = gestures[i]; FingerClusterManager.Cluster cluster = ClusterManager.FindClusterById(g.ClusterId); FingerGestures.IFingerList touches = (cluster != null) ? cluster.Fingers : EmptyFingerList; UpdateGesture(g, touches); } }
protected virtual T MatchActiveGestureToCluster(FingerClusterManager.Cluster cluster) { return(null); }
protected virtual T FindGestureByCluster(FingerClusterManager.Cluster cluster) { return(gestures.Find(g => g.ClusterId == cluster.Id)); }