/// <summary> /// Removes the action. /// </summary> /// <param name="e">E.</param> public void RemoveAction(InputActions a, EventHandler e) { if (InputEvents.ContainsKey(a)) { InputEvents[a] -= e; } }
/// <summary> /// Registers the event for a given action. /// </summary> /// <param name="action">Action.</param> /// <param name="callback">Callback.</param> public void RegisterEvent(InputActions action, EventHandler callback) { if (!InputEvents.ContainsKey(action)) { InputEvents.Add(action, null); } InputEvents[action] += callback; }
protected void OnUpdate() { ActionsFired.Clear(); KeyboardState keyboardState = Keyboard.GetState(); MouseState mouseState = Mouse.GetState(); foreach (KeyValuePair <InputActions, InputState> action in Inputs.Info) { // Manage mouse events. if (!action.Value.IsKeyboard && action.Value.MouseKey != MouseKeys.None) { if (CheckMouseState(keyboardState, mouseState, action.Value)) { if (InputEvents.ContainsKey(action.Key)) { InputEvents[action.Key](this, new InputEventArgs() { MousePosition = MousePosition }); } ActionsFired.Add(action.Key); } } else if (action.Value.KeyboardKey != Keys.None) { switch (action.Value.State) { // The type of key state. case KeyState.Up: // Makes sure it is in the good state. if (keyboardState.IsKeyUp(action.Value.KeyboardKey) && (!action.Value.Sensitive || CheckDeadKey(keyboardState, action.Value.DeadKey))) { if (InputEvents.ContainsKey(action.Key)) { InputEvents[action.Key](this, new InputEventArgs()); } // Adds it to the list to be able to query all event fired in this frame. ActionsFired.Add(action.Key); } break; case KeyState.Down: if (keyboardState.IsKeyDown(action.Value.KeyboardKey) && (!action.Value.Sensitive || CheckDeadKey(keyboardState, action.Value.DeadKey))) { if (InputEvents.ContainsKey(action.Key)) { InputEvents[action.Key](this, new InputEventArgs()); } ActionsFired.Add(action.Key); } break; case KeyState.Pressed: if (keyboardState.IsKeyDown(action.Value.KeyboardKey) && OldKeyboard.IsKeyUp(action.Value.KeyboardKey) && (!action.Value.Sensitive || CheckDeadKey(keyboardState, action.Value.DeadKey))) { if (InputEvents.ContainsKey(action.Key)) { InputEvents[action.Key](this, new InputEventArgs()); } ActionsFired.Add(action.Key); } break; case KeyState.Released: if (keyboardState.IsKeyUp(action.Value.KeyboardKey) && OldKeyboard.IsKeyDown(action.Value.KeyboardKey) && (!action.Value.Sensitive || CheckDeadKey(keyboardState, action.Value.DeadKey))) { if (InputEvents.ContainsKey(action.Key)) { InputEvents[action.Key](this, new InputEventArgs()); } ActionsFired.Add(action.Key); } break; } } } OldKeyboard = keyboardState; OldMouse = mouseState; if (IsWindowReady && IsActive) { Cursor.Position = MousePosition; } }