🚀 Added exercise 2 part 3

mapping +
factory indexer
ex2-part3-mapping-et-factory
nico-dev 1 year ago
parent 9b36be4df2
commit 89b1db029d

@ -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<T>
{
// Indique si le mappage est en cours d'exécution.
private bool running;
//public EventHandler<OnMapping> OnMapping { get; set; }
// Événement déclenché lorsque le mappage est effectué.
public EventHandler<T> 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;
}
}
}
}

@ -6,5 +6,6 @@ namespace KinectUtils
public interface IGestureFactory
{
IEnumerable<BaseGesture> CreateGestures();
BaseGesture this[string name] { get; }
}
}

@ -12,8 +12,10 @@ namespace KinectUtils
/// </summary>
public class PenaltyMasterGestureFactory : IGestureFactory
{
private Dictionary<string, BaseGesture> gestures = new Dictionary<string, BaseGesture>();
/// <summary>
/// Creates all baseGesture objects needed for the penaly master
/// Creates all baseGesture objects needed for the penalty master
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
@ -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.");
}
}
}
}
}
}
Loading…
Cancel
Save