Middleware :
Mod transition stabilized.
Order :
NO_USER > USER_INCOMING > SHOWMOS_# > MOSAIC
--- 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");