コード例 #1
0
        public void SkeletonUpdate(SkeletonUpdateArgs e)
        {
            // Check to see if we have gone from 2 players to 1 player on this Kinect
            bool missingPlayer = e.Skeletons.Count < players[e.KinectId].Values.Count && e.Skeletons.Count == 1;

            // If we have a missing player, remove him and free his PlayerId for the next drop-in
            if (missingPlayer)
            {
                // TODO: refactor this to work a little better
                Player[] playerArray = players[e.KinectId].Values.ToArray<Player>();

                for (int i = 0; i < playerArray.Length; i++)
                {
                    if (playerArray[i].Skeleton.TrackingId != e.Skeletons[0].TrackingId)
                    {
                        RemovePlayer(playerArray[i]);
                    }
                }
            }

            // Iterate through the skeletons
            foreach (Skeleton skeleton in e.Skeletons)
            {
                // Try to update the skeleton associated with the new skeleton's tracking id
                try
                {
                    Player p = players[e.KinectId][skeleton.TrackingId];
                    p.Skeleton = skeleton;
                }
                catch (KeyNotFoundException e1)
                {
                    // If no skeleton is found and there is room, add a new player
                    if (players.Count < (pipeThreads.Count * 2))
                    {
                        //AddPlayer(new Player(playerIndex, e.KinectId, skeleton));
                        AddPlayer(skeleton, e.KinectId);
                    }
                }
            }

            // Call to gesture module
            if (players[e.KinectId].Values.Count > 0)
            {
                GestureModuleArgs args = new GestureModuleArgs(players[e.KinectId].Values.ToList<Player>());
                gestureModules[e.KinectId].BeginInvoke(args, null, null);
            }
        }
コード例 #2
0
        public void DoWork(GestureModuleArgs e)
        {
            // Run the gesture module on the given Players
            List<GestureEvent> events = this.gestureModule.processPlayers(e.Players);
            //List<GestureEvent> events = new List<GestureEvent>();
            //events.Add(new GestureEvent("Testing"));

            GestureCompletedArgs args = new GestureCompletedArgs(events);

            //invoke main thread to send back gesture info
            completed.BeginInvoke(args, null, null);
        }