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