Middleware :
authorbastiena
Fri, 30 Mar 2012 11:14:14 +0200
changeset 14 10d5199d9874
parent 13 50de8e8f44d7
child 15 4b78f179e7ce
Middleware : Mod transition stabilized. Order : NO_USER > USER_INCOMING > SHOWMOS_# > MOSAIC
middleware/src/Communication/Server.cs
middleware/src/Tracking/Events/UserPositionListener.cs
middleware/src/Tracking/KinectMain.cs
middleware/src/Tracking/ModeManagement.cs
--- a/middleware/src/Communication/Server.cs	Thu Mar 29 14:39:21 2012 +0200
+++ b/middleware/src/Communication/Server.cs	Fri Mar 30 11:14:14 2012 +0200
@@ -60,6 +60,8 @@
         private System.Timers.Timer _timer;
         //Gestionnaire de ressources.
         private ResourceManager rm;
+        //Dernier code envoyé.
+        private String lastCode;
 
         /*
         * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
@@ -76,6 +78,7 @@
             messageCreated = false;
             gestureLocked = false;
             modLocked = false;
+            lastCode = "";
 
             timerElapsing = _timerElapsing;
 
@@ -220,6 +223,10 @@
         */
         public void GesturePerformed(String code)
         {
+            //Si le code vient d'être envoyé, on passe.
+            if (lastCode.Equals(code))
+                return;
+            lastCode = code;
             //Si une gesture a été effectuée, on bloque un certain temps.
             if (!gestureLocked)
             {
@@ -229,6 +236,7 @@
                 if (!messageCreated)
                 {
                     messageCreated = true;
+                    Console.Out.WriteLine("A 2");
                     server.AddTuioString(2, code);
                     //On démarre le timer.
                     _timer.Start();
@@ -241,6 +249,10 @@
         */
         public void ModeNotification(String code)
         {
+            //Si le code vient d'être envoyé, on passe.
+            if (lastCode.Equals(code))
+                return;
+            lastCode = code;
             //Si on a été notifié.
             if (!modLocked)
             {
@@ -250,6 +262,7 @@
                 if (!messageCreated)
                 {
                     messageCreated = true;
+                    Console.Out.WriteLine("A 3");
                     server.AddTuioString(2, code);
                     //On démarre le timer.
                     _timer.Start();
@@ -287,6 +300,8 @@
                     //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
                     messageCreated = false;
                     server.DeleteTuioString(2);
+                    //server.DeleteTuioString(3);
+                    Console.Out.WriteLine("R");
                 }
             }
         }
--- a/middleware/src/Tracking/Events/UserPositionListener.cs	Thu Mar 29 14:39:21 2012 +0200
+++ b/middleware/src/Tracking/Events/UserPositionListener.cs	Fri Mar 30 11:14:14 2012 +0200
@@ -39,7 +39,8 @@
             //On l'indique dans le debug.
             e.debug.showDistance(e.distance);
             //On notifie le serveur TUIO.
-            e.server.ModeNotification("MOSSHOW-" + e.imagesToShow);
+            if(e.distance > 10f && e.distance < 100f)
+                e.server.ModeNotification("MOSSHOW-" + e.imagesToShow);
         }
     }
 }
--- a/middleware/src/Tracking/KinectMain.cs	Thu Mar 29 14:39:21 2012 +0200
+++ b/middleware/src/Tracking/KinectMain.cs	Fri Mar 30 11:14:14 2012 +0200
@@ -256,6 +256,7 @@
 
             //On crée le gestionnaire de modes.
             modeManagement = new ModeManagement(this, server, debug);
+            modeManagement.DetectProximityBasedModes(0);
         }
 
         /*
@@ -464,16 +465,17 @@
                     float proximity = userPositionDetector.CalcProximity(first.Position.Z);
                     int numberOfImages = userPositionDetector.ImagesToShow(proximity, imagesToShow);
 
-                    modeManagement.DetectProximityBasedModes(proximity, numberOfImages);
+                    modeManagement.DetectProximityBasedModes(proximity);
 
                     if (proximity > 0f)
                     {
                         UserPositionEventArgs userPositionEvent = new UserPositionEventArgs(debug, server, proximity, numberOfImages);
                         OnUserPositionEvent(userPositionEvent);
                     }
-                    else
+                    else if(proximity < 10f)
                     {
                         debug.hideSkeleton();
+                        modeManagement.DetectProximityBasedModes(0);
                         LeftHandQuitEventArgs leftHandQuitEvent = new LeftHandQuitEventArgs(debug, server);
                         OnLeftHandQuitEvent(leftHandQuitEvent);
                         RightHandQuitEventArgs rightHandQuitEvent = new RightHandQuitEventArgs(debug, server);
@@ -488,6 +490,7 @@
             else
             {
                 debug.hideSkeleton();
+                modeManagement.DetectProximityBasedModes(0);
                 LeftHandQuitEventArgs leftHandQuitEvent = new LeftHandQuitEventArgs(debug, server);
                 OnLeftHandQuitEvent(leftHandQuitEvent);
                 RightHandQuitEventArgs rightHandQuitEvent = new RightHandQuitEventArgs(debug, server);
--- a/middleware/src/Tracking/ModeManagement.cs	Thu Mar 29 14:39:21 2012 +0200
+++ b/middleware/src/Tracking/ModeManagement.cs	Fri Mar 30 11:14:14 2012 +0200
@@ -65,7 +65,7 @@
         /*
         *  Détecte tout changement de mode en se basant sur la proximité de l'utilisateur.
         */
-        public void DetectProximityBasedModes(float proximity, int numberOfImages)
+        public void DetectProximityBasedModes(float proximity)
         {
             //Si l'utilisateur se déplace dans la zone de détection.
             //On traite le problème en plusieurs limites, on discrétise la zone.
@@ -77,14 +77,14 @@
                 OnModChangeEvent(modChangeEvent);
             }
             //S'il n'est pas encore au point d'interaction maximale, on considère qu'il est en chemin.
-            else if (proximity >= 10f && proximity < 100f)
+            else if (proximity >= 10f && proximity < 100f && currentMode != Mode.USER_INCOMING)
             {
                 currentMode = Mode.USER_INCOMING;
                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "USER_INCOMING");
                 OnModChangeEvent(modChangeEvent);
             }
             //S'il est arrivé au point, il a la mosaïque complète.
-            else
+            else if(proximity == 100f && currentMode != Mode.MOSAIC)
             {
                 currentMode = Mode.MOSAIC;
                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "MOSAIC");