1: using System;
2: using System.Collections.Generic;
3: using Microsoft.Xna.Framework;
4: using Microsoft.Xna.Framework.Graphics;
5: using xn;
6:
7: namespace StartDance
8: {
9: /// <summary>
10: /// This is a game component that implements IUpdateable.
11: /// </summary>
12: public class PlayerManager : Microsoft.Xna.Framework.GameComponent
13: {
14: Game thisgame;
15: Context context;
16: UserGenerator userGenerator;
17: GestureGenerator gestureGenerator;
18: Delegate gestureHandler;
19: public List<Player> playerList;
20:
21: public PlayerManager(Game game, Delegate _gestureHandler)
22: : base(game)
23: {
24: thisgame = game;
25: gestureHandler = _gestureHandler;
26: try
27: {
28: context = new Context("openni.xml");
29: userGenerator = new UserGenerator(context);
30: userGenerator.NewUser += new UserGenerator.NewUserHandler(userGenerator_NewUser);
31: userGenerator.LostUser += new UserGenerator.LostUserHandler(userGenerator_LostUser);
32: gestureGenerator = new GestureGenerator(context);
33: gestureGenerator.AddGesture("Wave");
34: gestureGenerator.GestureRecognized += new GestureGenerator.GestureRecognizedHandler(
35: gestureGenerator_GestureRecognized);
36: context.StartGeneratingAll();
37:
38: playerList = new List<Player>();
39: Initialize();
40: }
41: catch (Exception ex)
42: {
43: game.Dispose();
44: game.Exit();
45: }
46: }
47:
48: void gestureGenerator_GestureRecognized(ProductionNode node, string strGesture,
49: ref Point3D idPosition, ref Point3D endPosition)
50: {
51: if (strGesture == "Wave")
52: {
53: gestureHandler.DynamicInvoke();
54: }
55: }
56:
57: void userGenerator_NewUser(ProductionNode node, uint id)
58: {
59: Player player = new Player(id);
60: playerList.Add(player);
61: Console.WriteLine("New User : " + id);
62: //throw new NotImplementedException();
63: }
64:
65: void userGenerator_LostUser(ProductionNode node, uint id)
66: {
67: Player player = playerList.Find(a=>a.uid==id);
68: playerList.Remove(player);
69: Console.WriteLine("Lost User : " + id);
70: //throw new NotImplementedException();
71: }
72:
73: public override void Initialize()
74: {
75: base.Initialize();
76: }
77:
78: public override void Update(GameTime gameTime)
79: {
80: // TODO: Add your update code here
81: if (context != null)
82: {
83: context.WaitNoneUpdateAll();
84: foreach (Player player in playerList)
85: {
86: player.position = userGenerator.GetCoM(player.uid);
87: }
88: }
89: base.Update(gameTime);
90: }
91: }
92: }