From 89b1db029d11c278fd134510b79f9a2f95513693 Mon Sep 17 00:00:00 2001 From: nico-dev Date: Fri, 16 Feb 2024 20:33:40 +0100 Subject: [PATCH] :rocket: Added exercise 2 part 3 mapping + factory indexer --- KinectUtils/BaseMapping.cs | 43 ++++++++++++++++---- KinectUtils/IGestureFactory.cs | 1 + MyGestureBank/PenaltyMasterGestureFactory.cs | 40 +++++++++++++----- 3 files changed, 65 insertions(+), 19 deletions(-) diff --git a/KinectUtils/BaseMapping.cs b/KinectUtils/BaseMapping.cs index 00aee06..1b0387a 100644 --- a/KinectUtils/BaseMapping.cs +++ b/KinectUtils/BaseMapping.cs @@ -8,36 +8,63 @@ using System.Threading.Tasks; namespace KinectUtils { + // Classe de base pour les mappages. T est le type de données renvoyé par le mappage. public abstract class BaseMapping { + // Indique si le mappage est en cours d'exécution. private bool running; - //public EventHandler OnMapping { get; set; } + // Événement déclenché lorsque le mappage est effectué. + public EventHandler OnMapping { get; set; } + // Souscrit à un geste qui démarre le mappage. public void SubscribeToStartGesture(BaseGesture gesture) { - + // Lorsque le geste est reconnu, le mappage est démarré. + gesture.GestureRecognized += (sender, args) => running = true; } + // Souscrit à un geste qui arrête le mappage. public void SubscribeToEndGesture(BaseGesture gesture) { - + // Lorsque le geste est reconnu, le mappage est arrêté. + gesture.GestureRecognized += (sender, args) => running = false; } + // Souscrit à un geste qui bascule l'état du mappage. public void SubscribeToToggleGesture(BaseGesture gesture) { - + // Lorsque le geste est reconnu, l'état du mappage est inversé. + gesture.GestureRecognized += (sender, args) => running = !running; } + // Méthode abstraite pour effectuer le mappage. Doit être implémentée par les classes dérivées. protected abstract T Mapping(Body body); - /*bool TestMapping(Body body, out T ouput) + // Teste si le mappage peut être effectué. + bool TestMapping(Body body) { - }*/ + // Le mappage peut être effectué si le mappage est en cours d'exécution. + return running; + } - protected void OnBodyFrameArrived(object obj, BodyFrameArrivedEventArgs args) + // Teste si le mappage peut être effectué et renvoie le résultat du mappage. + protected bool TestMapping(Body body, out T output) { + // Initialise la sortie à la valeur par défaut. + output = default(T); + + // Si le mappage n'est pas en cours d'exécution, retourne false. + if (!running) + { + return false; + } + + // Appelle la méthode de mappage et assigne le résultat à la sortie. + output = Mapping(body); + // Retourne true si le mappage a réussi. + return output != null; } } -} +} \ No newline at end of file diff --git a/KinectUtils/IGestureFactory.cs b/KinectUtils/IGestureFactory.cs index 72844d9..473c20b 100644 --- a/KinectUtils/IGestureFactory.cs +++ b/KinectUtils/IGestureFactory.cs @@ -6,5 +6,6 @@ namespace KinectUtils public interface IGestureFactory { IEnumerable CreateGestures(); + BaseGesture this[string name] { get; } } } \ No newline at end of file diff --git a/MyGestureBank/PenaltyMasterGestureFactory.cs b/MyGestureBank/PenaltyMasterGestureFactory.cs index da449bd..b53aa1a 100644 --- a/MyGestureBank/PenaltyMasterGestureFactory.cs +++ b/MyGestureBank/PenaltyMasterGestureFactory.cs @@ -12,8 +12,10 @@ namespace KinectUtils /// public class PenaltyMasterGestureFactory : IGestureFactory { + private Dictionary gestures = new Dictionary(); + /// - /// Creates all baseGesture objects needed for the penaly master + /// Creates all baseGesture objects needed for the penalty master /// /// /// @@ -30,16 +32,32 @@ namespace KinectUtils // Gesture SoccerShootGesture soccerShootGesture = new SoccerShootGesture(); - BaseGesture[] gestures = new BaseGesture[5]; - gestures[0] = postureHandUpLeft; - gestures[1] = postureHandUpRight; - gestures[2] = postureHandDownLeft; - gestures[3] = postureHandDownRight; - //gestures[4] = postureTwoHandsDown; - //gestures[5] = postureTwoHandsUp; - gestures[4] = soccerShootGesture; + // Add gestures to the dictionary + gestures.Add("PostureHandUpRight", postureHandUpRight); + gestures.Add("PostureHandUpLeft", postureHandUpLeft); + gestures.Add("PostureHandDownLeft", postureHandDownLeft); + gestures.Add("PostureHandDownRight", postureHandDownRight); + //gestures.Add("PostureTwoHandsDown", postureTwoHandsDown); + //gestures.Add("PostureTwoHandsUp", postureTwoHandsUp); + gestures.Add("SoccerShootGesture", soccerShootGesture); + + return gestures.Values; + } - return gestures; + // Indexer to get a gesture by its name + public BaseGesture this[string name] + { + get + { + if (gestures.ContainsKey(name)) + { + return gestures[name]; + } + else + { + throw new KeyNotFoundException($"Gesture with name {name} not found."); + } + } } } -} +} \ No newline at end of file