Ejemplo n.º 1
0
        private void OnInputsUpdated(InputUpdateEventArgs e)
        {
            EventHandler<InputUpdateEventArgs> handler;

            lock (UpdateInputsLock)
            {
                handler = InputUpdated;
            }
            if(handler != null)
            {
                handler(this,e);
            }
        }
Ejemplo n.º 2
0
        private void OnInputsUpdateEventHandler(object sender, InputUpdateEventArgs e)
        {
          
            String clusterHash;

            ResetClustersBuffers();
        
            foreach (int touchId in InternalTouches.CancelledTouchBuffer)
            {
                clusterHash = GetClusterIdFromTouchPoint(touchId);
                if (clusterHash != null)
                {
                    //Is a cluster with more than one point
                    if (clusters[clusterHash].PointsIds.Count > 1)
                    {
                        Cluster updatedCluster = clusters[clusterHash].RemovePoint(touchId);
                        //Update Current state Clusters
                        clusters.Remove(clusterHash);
                        clusters.Add(updatedCluster.Hash, updatedCluster);

                        //If State is Cancelled update CancelledCluster Buffer
                        if (updatedCluster.State == ClusterState.Cancelled)
                        {
                            IdentifiedClustersCancelled.Remove(updatedCluster.CancelledClusterHash);
                            IdentifiedClustersCancelled.Add(updatedCluster.CancelledClusterHash, updatedCluster);
                        }
                    }
                    //Is a cluster with only one point
                    else
                    {
                        //Update CancelledClusterBuffer
                        Cluster cluster = clusters[clusterHash].RemovePoint(touchId);
                        if(cluster.State == ClusterState.Cancelled)
                        {
                            IdentifiedClustersCancelled.Remove(cluster.CancelledClusterHash);
                            IdentifiedClustersCancelled.Add(cluster.CancelledClusterHash, cluster);
                        }
                        
                        //Remove cluster from current Clusters
                        clusters.Remove(clusterHash);
                    }
                        
                    
                }
                //Remove touch from fingers touch list

            }

            foreach (int touchId in InternalTouches.MovedTouchBuffer)
            {
                clusterHash = GetClusterIdFromTouchPoint(touchId);
                if (clusterHash != null)
                {
                    Cluster[] updatedCluster = clusters[clusterHash].UpdatePoint(touchId);
                    
                        clusters.Remove(clusterHash);
                    if (updatedCluster[0].Points.Count != 0)
                    {
                        clusters.Add(updatedCluster[0].Hash, updatedCluster[0]);
                        if (updatedCluster[0].State == ClusterState.Cancelled)
                        {
                            IdentifiedClustersCancelled.Remove(updatedCluster[0].CancelledClusterHash);
                            IdentifiedClustersCancelled.Add(updatedCluster[0].CancelledClusterHash, updatedCluster[0]);
                        }
                    }
                    
                    //Its the case where a previous cluster gets separeted into two
                    if (updatedCluster[1] != null)
                        clusters.Add(updatedCluster[1].Hash, updatedCluster[1]);

                }
                else
                {
                    Cluster c = new Cluster(InternalTouches.List[touchId]);
                    clusters.Add(c.Hash, c);
                }
            }


            foreach (int touchId in InternalTouches.BaganTouhBuffer)
            {
                Cluster cl = new Cluster(InternalTouches.List[touchId]);
                clusters.Add(cl.Hash, cl);

            }

            if(InternalTouches.CancelledTouchBuffer.Count > 0 || InternalTouches.MovedTouchBuffer.Count > 0 || InternalTouches.BaganTouhBuffer.Count > 0)
            {
                UpdateClusters();

                CheckClustersUpdated();

                if (IdentifiedClustersCancelled.Count > 0)
                    OnClustersCancelled(new ClusterUpdateEventArgs("Moved cluster request", IdentifiedClustersCancelled.Values.ToList()));

                if (IdentifiedClustersMoved.Count > 0)
                    OnClustersMoved(new ClusterUpdateEventArgs("Moved cluster request", IdentifiedClustersMoved));

                if (ClustersToIdentify.Count > 0)
                    OnClusterToIdentify(new ClusterUpdateEventArgs("Identification request", ClustersToIdentify));

                
                //Get points which are touches and not markers
                InputManager.SetFingersCancelled(InternalTouches.CancelledTouchBuffer.ToArray());

                foreach (Cluster c in clusters.Values)
                {
                    if(c.State == ClusterState.Invalid || c.State == ClusterState.Cancelled)
                    {
                        //This cluster is only made of finger touch points
                        foreach (TouchInput touch in c.Points.Values)
                        {
                            InputManager.AddFingerTouch(touch);
                        }

                    }

                }
            }

        }