diff options
| author | Ben Beltran <ben@nsovocal.com> | 2013-11-12 06:44:55 -0600 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2013-11-12 06:44:55 -0600 |
| commit | 2af83e98005a14c439b360a5b9ac636f594d9f0c (patch) | |
| tree | 5c219527947cb86a15e68ed379fbf0008929b77d /Super Polarity/InputController.cs | |
| parent | f8aec187ea7dc410a32996406109f290f3199ffa (diff) | |
Implements polarity system
Diffstat (limited to 'Super Polarity/InputController.cs')
| -rw-r--r-- | Super Polarity/InputController.cs | 82 |
1 files changed, 80 insertions, 2 deletions
diff --git a/Super Polarity/InputController.cs b/Super Polarity/InputController.cs index 405b3ab..ad07717 100644 --- a/Super Polarity/InputController.cs +++ b/Super Polarity/InputController.cs @@ -11,6 +11,8 @@ namespace SuperPolarity static Dictionary<string, List<Action<float>>> Listeners; static Dictionary<string, List<Keys>> RegisteredKeys; static Dictionary<string, List<Buttons>> RegisteredButtons; + static List<string> BlockedKeys; + static List<string> BlockedButtons; static GamePadState InputGamePadState; static KeyboardState InputKeyboardState; @@ -25,6 +27,10 @@ namespace SuperPolarity static InputController() { Listeners = new Dictionary<string,List<Action<float>>>(); + RegisteredButtons = new Dictionary<string, List<Buttons>>(); + RegisteredKeys = new Dictionary<string, List<Keys>>(); + BlockedKeys = new List<string>(); + BlockedButtons = new List<string>(); InputKeyboardState = new KeyboardState(); InputGamePadState = new GamePadState(); } @@ -42,8 +48,82 @@ namespace SuperPolarity InputKeyboardState = Keyboard.GetState(); } + public static void RegisterEventForKey(string eventName, Keys key) + { + List<Keys> newKeyList; + if (!RegisteredKeys.ContainsKey(eventName)) + { + newKeyList = new List<Keys>(); + RegisteredKeys.Add(eventName, newKeyList); + } + + RegisteredKeys.TryGetValue(eventName, out newKeyList); + + newKeyList.Add(key); + } + + public static void RegisterEventForButton(string eventName, Buttons button) + { + List<Buttons> newButtonList; + if (!RegisteredButtons.ContainsKey(eventName)) + { + newButtonList = new List<Buttons>(); + RegisteredButtons.Add(eventName, newButtonList); + } + + RegisteredButtons.TryGetValue(eventName, out newButtonList); + + newButtonList.Add(button); + } + private static void DispatchRegisteredEvents() { + var keyFired = false; + + foreach (KeyValuePair<string,List<Keys>> entry in RegisteredKeys) { + keyFired = false; + foreach (Keys key in entry.Value) + { + if (InputKeyboardState.IsKeyDown(key)) + { + if (!BlockedKeys.Contains(entry.Key)) + { + Dispatch(entry.Key, 1); + BlockedKeys.Add(entry.Key); + } + keyFired = true; + break; + } + } + + if (!keyFired) + { + BlockedKeys.Remove(entry.Key); + } + } + + foreach (KeyValuePair<string, List<Buttons>> entry in RegisteredButtons) + { + keyFired = false; + foreach (Buttons button in entry.Value) + { + if (InputGamePadState.IsButtonDown(button)) + { + if (!BlockedButtons.Contains(entry.Key)) + { + Dispatch(entry.Key, 1); + BlockedButtons.Add(entry.Key); + } + keyFired = true; + break; + }; + } + + if (!keyFired) + { + BlockedButtons.Remove(entry.Key); + } + } } private static void DispatchMoveEvents() @@ -55,8 +135,6 @@ namespace SuperPolarity xMovement = InputGamePadState.ThumbSticks.Left.X; yMovement = -InputGamePadState.ThumbSticks.Left.Y; - Console.WriteLine("Dispatching Input {0}", InputKeyboardState.IsKeyDown(Keys.Left)); - if (InputKeyboardState.IsKeyDown(Keys.Left)) { xMovement = -1.0f; |