middleware/src/Tracking/ModeManagement.cs
changeset 13 50de8e8f44d7
child 14 10d5199d9874
equal deleted inserted replaced
12:a446351f08c0 13:50de8e8f44d7
       
     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.Tracking.Events;
       
    28 using Trakers.Debug;
       
    29 
       
    30 namespace Trakers.Tracking
       
    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(KinectMain _kinectMain, Server _server, DebugWindow _debug)
       
    54         {
       
    55             kinectMain = _kinectMain;
       
    56             server = _server;
       
    57             debug = _debug;
       
    58             currentMode = Mode.NO_USER;
       
    59 
       
    60             //Fonction appelée lorsqu'on change de mode.
       
    61             ModChangeListener modChangeListener = new ModChangeListener();
       
    62             ModChangeEvent += new ModChangeHandler(modChangeListener.ShowOnScreen);
       
    63         }
       
    64 
       
    65         /*
       
    66         *  Détecte tout changement de mode en se basant sur la proximité de l'utilisateur.
       
    67         */
       
    68         public void DetectProximityBasedModes(float proximity, int numberOfImages)
       
    69         {
       
    70             //Si l'utilisateur se déplace dans la zone de détection.
       
    71             //On traite le problème en plusieurs limites, on discrétise la zone.
       
    72             //On considère qu'il n'y a pas d'utilisateur si sa proximité est trop faible.
       
    73             if (proximity < 10f && currentMode != Mode.NO_USER)
       
    74             {
       
    75                 currentMode = Mode.NO_USER;
       
    76                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "NO_USER");
       
    77                 OnModChangeEvent(modChangeEvent);
       
    78             }
       
    79             //S'il n'est pas encore au point d'interaction maximale, on considère qu'il est en chemin.
       
    80             else if (proximity >= 10f && proximity < 100f)
       
    81             {
       
    82                 currentMode = Mode.USER_INCOMING;
       
    83                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "USER_INCOMING");
       
    84                 OnModChangeEvent(modChangeEvent);
       
    85             }
       
    86             //S'il est arrivé au point, il a la mosaïque complète.
       
    87             else
       
    88             {
       
    89                 currentMode = Mode.MOSAIC;
       
    90                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "MOSAIC");
       
    91                 OnModChangeEvent(modChangeEvent);
       
    92             }
       
    93         }
       
    94 
       
    95         /*
       
    96         *  Détecte si l'utilisateur veut filtrer la mosaïque.
       
    97         */
       
    98         public void DetectFilterMode()
       
    99         {
       
   100             //Ne fonctionne que si on se trouve dans la mosaïque.
       
   101             if (currentMode == Mode.MOSAIC)
       
   102             {
       
   103                 currentMode = Mode.FILTER;
       
   104                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "FILTER");
       
   105                 OnModChangeEvent(modChangeEvent);
       
   106             }
       
   107         }
       
   108 
       
   109         /*
       
   110         *  Détecte si l'utilisateur veut entrer dans une vidéo.
       
   111         */
       
   112         public void DetectVideoMode()
       
   113         {
       
   114             //Si on vient de la mosaïque, d'un filtrage, de la timeline ou d'une recherche, on peut entrer.
       
   115             if (currentMode == Mode.MOSAIC || currentMode == Mode.FILTER ||
       
   116             currentMode == Mode.TIMELINE || currentMode == Mode.SEARCH)
       
   117             {
       
   118                 currentMode = Mode.VIDEO;
       
   119                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "VIDEO");
       
   120                 OnModChangeEvent(modChangeEvent);
       
   121             }
       
   122         }
       
   123 
       
   124         /*
       
   125         *  Détecte si l'utilisateur veut entrer dans la timeline.
       
   126         */
       
   127         public void DetectTimeLineMode()
       
   128         {
       
   129             //Si on est dans une vidéo, on peut entrer.
       
   130             if (currentMode == Mode.VIDEO)
       
   131             {
       
   132                 currentMode = Mode.TIMELINE;
       
   133                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "TIMELINE");
       
   134                 OnModChangeEvent(modChangeEvent);
       
   135             }
       
   136         }
       
   137 
       
   138         /*
       
   139         *  Détecte si l'utilisateur veut effectuer une recherche dans cette vidéo.
       
   140         */
       
   141         public void DetectSearchMode()
       
   142         {
       
   143             //Si on est dans une vidéo, on peut entrer.
       
   144             if (currentMode == Mode.VIDEO)
       
   145             {
       
   146                 currentMode = Mode.SEARCH;
       
   147                 ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "SEARCH");
       
   148                 OnModChangeEvent(modChangeEvent);
       
   149             }
       
   150         }
       
   151 
       
   152         /*
       
   153         *  Initialise l'événement et fait appel aux fonctions du listener quand on change de mode.
       
   154         */
       
   155         public static void OnModChangeEvent(ModChangeEventArgs e)
       
   156         {
       
   157             if (ModChangeEvent != null)
       
   158                 ModChangeEvent(new object(), e);
       
   159         }
       
   160     }
       
   161 }