middleware/src/MainModule/ModeManagement.cs
changeset 15 4b78f179e7ce
child 27 6c08d4d7219e
equal deleted inserted replaced
14:10d5199d9874 15:4b78f179e7ce
       
     1 /*
       
     2 * This file is part of the TraKERS\Middleware package.
       
     3 *
       
     4 * (c) IRI <http://www.iri.centrepompidou.fr/>
       
     5 *
       
     6 * For the full copyright and license information, please view the LICENSE_MIDDLEWARE
       
     7 * file that was distributed with this source code.
       
     8 */
       
     9 
       
    10 /*
       
    11  * Projet : TraKERS
       
    12  * Module : MIDDLEWARE
       
    13  * Sous-Module : Tracking
       
    14  * Classe : ModeManagement
       
    15  * 
       
    16  * Auteur : alexandre.bastien@iri.centrepompidou.fr
       
    17  * 
       
    18  * Fonctionnalités : Permet de gérer les différents modes qui découpent l'interaction avec le middleware.
       
    19  * Découpe l'interaction avec le middleware en différents modes.
       
    20  */
       
    21 
       
    22 using System;
       
    23 using System.Collections.Generic;
       
    24 using System.Linq;
       
    25 using System.Text;
       
    26 using Trakers.Communication;
       
    27 using Trakers.MainModule.Events;
       
    28 using Trakers.Debug;
       
    29 
       
    30 namespace Trakers.MainModule
       
    31 {
       
    32     public class ModeManagement
       
    33     {
       
    34         //Il s'agit de la fonctoin permettant de notifier le serveur en cas de changement de mode.
       
    35         public delegate void ModChangeHandler(object o, ModChangeEventArgs e);
       
    36         //L'événement on change de mode.
       
    37         public static event ModChangeHandler ModChangeEvent;
       
    38         
       
    39         //Accès au module d'interaction principal.
       
    40         private KinectMain kinectMain;
       
    41         //Accès au debug.
       
    42         private DebugWindow debug;
       
    43         //Accès au serveur.
       
    44         private Server server;
       
    45         //La liste des modes.
       
    46         public enum Mode {NO_USER, USER_INCOMING, MOSAIC, FILTER, VIDEO, TIMELINE, SEARCH};
       
    47         //Mode actuel.
       
    48         private Mode currentMode;
       
    49 
       
    50         /*
       
    51         *  Constructeur qui prend en paramètres le module principal et le serveur.
       
    52         */
       
    53         public ModeManagement(Server _server, DebugWindow _debug, KinectMain _kinectMain)
       
    54         {
       
    55             server = _server;
       
    56             debug = _debug;
       
    57             kinectMain = _kinectMain;
       
    58             server = _server;
       
    59             currentMode = Mode.NO_USER;
       
    60 
       
    61             //Fonction appelée lorsqu'on change de mode.
       
    62             ModChangeListener modChangeListener = new ModChangeListener();
       
    63             ModChangeEvent += new ModChangeHandler(modChangeListener.showAndSend);
       
    64         }
       
    65 
       
    66         /*
       
    67         *  Détecte tout changement de mode en se basant sur la proximité de l'utilisateur.
       
    68         */
       
    69         public void DetectProximityBasedModes(float proximity)
       
    70         {
       
    71             //Si l'utilisateur se déplace dans la zone de détection.
       
    72             //On traite le problème en plusieurs limites, on discrétise la zone.
       
    73             //On considère qu'il n'y a pas d'utilisateur si sa proximité est trop faible.
       
    74             if (proximity < 10f && currentMode != Mode.NO_USER)
       
    75             {
       
    76                 currentMode = Mode.NO_USER;
       
    77                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(server, debug, "NO_USER");
       
    78                 OnModChangeEvent(modChangeEvent);
       
    79             }
       
    80             //S'il n'est pas encore au point d'interaction maximale, on considère qu'il est en chemin.
       
    81             else if (proximity >= 10f && proximity < 100f && currentMode != Mode.USER_INCOMING)
       
    82             {
       
    83                 currentMode = Mode.USER_INCOMING;
       
    84                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(server, debug, "USER_INCOMING");
       
    85                 OnModChangeEvent(modChangeEvent);
       
    86             }
       
    87             //S'il est arrivé au point, il a la mosaïque complète.
       
    88             else if(proximity == 100f && currentMode != Mode.MOSAIC)
       
    89             {
       
    90                 currentMode = Mode.MOSAIC;
       
    91                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(server, debug, "MOSAIC");
       
    92                 OnModChangeEvent(modChangeEvent);
       
    93             }
       
    94         }
       
    95 
       
    96         /*
       
    97         *  Détecte si l'utilisateur veut filtrer la mosaïque.
       
    98         */
       
    99         public void DetectFilterMode()
       
   100         {
       
   101             //Ne fonctionne que si on se trouve dans la mosaïque.
       
   102             if (currentMode == Mode.MOSAIC)
       
   103             {
       
   104                 currentMode = Mode.FILTER;
       
   105                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(server, debug, "FILTER");
       
   106                 OnModChangeEvent(modChangeEvent);
       
   107             }
       
   108         }
       
   109 
       
   110         /*
       
   111         *  Détecte si l'utilisateur veut entrer dans une vidéo.
       
   112         */
       
   113         public void DetectVideoMode()
       
   114         {
       
   115             //Si on vient de la mosaïque, d'un filtrage, de la timeline ou d'une recherche, on peut entrer.
       
   116             if (currentMode == Mode.MOSAIC || currentMode == Mode.FILTER ||
       
   117             currentMode == Mode.TIMELINE || currentMode == Mode.SEARCH)
       
   118             {
       
   119                 currentMode = Mode.VIDEO;
       
   120                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(server, debug, "VIDEO");
       
   121                 OnModChangeEvent(modChangeEvent);
       
   122             }
       
   123         }
       
   124 
       
   125         /*
       
   126         *  Détecte si l'utilisateur veut entrer dans la timeline.
       
   127         */
       
   128         public void DetectTimeLineMode()
       
   129         {
       
   130             //Si on est dans une vidéo, on peut entrer.
       
   131             if (currentMode == Mode.VIDEO)
       
   132             {
       
   133                 currentMode = Mode.TIMELINE;
       
   134                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(server, debug, "TIMELINE");
       
   135                 OnModChangeEvent(modChangeEvent);
       
   136             }
       
   137         }
       
   138 
       
   139         /*
       
   140         *  Détecte si l'utilisateur veut effectuer une recherche dans cette vidéo.
       
   141         */
       
   142         public void DetectSearchMode()
       
   143         {
       
   144             //Si on est dans une vidéo, on peut entrer.
       
   145             if (currentMode == Mode.VIDEO)
       
   146             {
       
   147                 currentMode = Mode.SEARCH;
       
   148                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(server, debug, "SEARCH");
       
   149                 OnModChangeEvent(modChangeEvent);
       
   150             }
       
   151         }
       
   152 
       
   153         /*
       
   154         *  Initialise l'événement et fait appel aux fonctions du listener quand on change de mode.
       
   155         */
       
   156         public static void OnModChangeEvent(ModChangeEventArgs e)
       
   157         {
       
   158             if (ModChangeEvent != null)
       
   159                 ModChangeEvent(new object(), e);
       
   160         }
       
   161     }
       
   162 }