diff -r 10d5199d9874 -r 4b78f179e7ce middleware/src/Tracking/ModeManagement.cs --- a/middleware/src/Tracking/ModeManagement.cs Fri Mar 30 11:14:14 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/* -* This file is part of the TraKERS\Middleware package. -* -* (c) IRI -* -* For the full copyright and license information, please view the LICENSE_MIDDLEWARE -* file that was distributed with this source code. -*/ - -/* - * Projet : TraKERS - * Module : MIDDLEWARE - * Sous-Module : Tracking - * Classe : ModeManagement - * - * Auteur : alexandre.bastien@iri.centrepompidou.fr - * - * Fonctionnalités : Permet de gérer les différents modes qui découpent l'interaction avec le middleware. - * Découpe l'interaction avec le middleware en différents modes. - */ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Trakers.Communication; -using Trakers.Tracking.Events; -using Trakers.Debug; - -namespace Trakers.Tracking -{ - public class ModeManagement - { - //Il s'agit de la fonctoin permettant de notifier le serveur en cas de changement de mode. - public delegate void ModChangeHandler(object o, ModChangeEventArgs e); - //L'événement on change de mode. - public static event ModChangeHandler ModChangeEvent; - - //Accès au module d'interaction principal. - private KinectMain kinectMain; - //Accès au debug. - private DebugWindow debug; - //Accès au serveur. - private Server server; - //La liste des modes. - public enum Mode {NO_USER, USER_INCOMING, MOSAIC, FILTER, VIDEO, TIMELINE, SEARCH}; - //Mode actuel. - private Mode currentMode; - - /* - * Constructeur qui prend en paramètres le module principal et le serveur. - */ - public ModeManagement(KinectMain _kinectMain, Server _server, DebugWindow _debug) - { - kinectMain = _kinectMain; - server = _server; - debug = _debug; - currentMode = Mode.NO_USER; - - //Fonction appelée lorsqu'on change de mode. - ModChangeListener modChangeListener = new ModChangeListener(); - ModChangeEvent += new ModChangeHandler(modChangeListener.ShowOnScreen); - } - - /* - * Détecte tout changement de mode en se basant sur la proximité de l'utilisateur. - */ - 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. - //On considère qu'il n'y a pas d'utilisateur si sa proximité est trop faible. - if (proximity < 10f && currentMode != Mode.NO_USER) - { - currentMode = Mode.NO_USER; - ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "NO_USER"); - 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 && 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 if(proximity == 100f && currentMode != Mode.MOSAIC) - { - currentMode = Mode.MOSAIC; - ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "MOSAIC"); - OnModChangeEvent(modChangeEvent); - } - } - - /* - * Détecte si l'utilisateur veut filtrer la mosaïque. - */ - public void DetectFilterMode() - { - //Ne fonctionne que si on se trouve dans la mosaïque. - if (currentMode == Mode.MOSAIC) - { - currentMode = Mode.FILTER; - ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "FILTER"); - OnModChangeEvent(modChangeEvent); - } - } - - /* - * Détecte si l'utilisateur veut entrer dans une vidéo. - */ - public void DetectVideoMode() - { - //Si on vient de la mosaïque, d'un filtrage, de la timeline ou d'une recherche, on peut entrer. - if (currentMode == Mode.MOSAIC || currentMode == Mode.FILTER || - currentMode == Mode.TIMELINE || currentMode == Mode.SEARCH) - { - currentMode = Mode.VIDEO; - ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "VIDEO"); - OnModChangeEvent(modChangeEvent); - } - } - - /* - * Détecte si l'utilisateur veut entrer dans la timeline. - */ - public void DetectTimeLineMode() - { - //Si on est dans une vidéo, on peut entrer. - if (currentMode == Mode.VIDEO) - { - currentMode = Mode.TIMELINE; - ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "TIMELINE"); - OnModChangeEvent(modChangeEvent); - } - } - - /* - * Détecte si l'utilisateur veut effectuer une recherche dans cette vidéo. - */ - public void DetectSearchMode() - { - //Si on est dans une vidéo, on peut entrer. - if (currentMode == Mode.VIDEO) - { - currentMode = Mode.SEARCH; - ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "SEARCH"); - OnModChangeEvent(modChangeEvent); - } - } - - /* - * Initialise l'événement et fait appel aux fonctions du listener quand on change de mode. - */ - public static void OnModChangeEvent(ModChangeEventArgs e) - { - if (ModChangeEvent != null) - ModChangeEvent(new object(), e); - } - } -}