diff --git a/CHANGELOG.md b/CHANGELOG.md index e97d705..d80b22b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ Jump to version: Additions - Added TokenizedString.Realign - Added GetFlags and GetUniqueFlags to EnumHelper -- Added GetDownTime, GetUpTime and GetTimeSincePress to Keybind and Combination +- Added GetDownTime, GetUpTime, GetTimeSincePress, WasModifierDown and WasDown to Keybind and Combination - **Added the ability to find paths to one of multiple goals using AStar** Improvements diff --git a/MLEM/Input/InputHandler.cs b/MLEM/Input/InputHandler.cs index 4cb6740..d32c305 100644 --- a/MLEM/Input/InputHandler.cs +++ b/MLEM/Input/InputHandler.cs @@ -757,6 +757,48 @@ namespace MLEM.Input { } } + /// + /// Returns if a given control of any kind was down in the last update call. + /// This is a helper function that can be passed a , or . + /// + /// The control whose down state to query + /// The index of the gamepad to query (if applicable), or -1 for any gamepad + /// Whether the given control was down + /// If the passed control isn't of a supported type + public bool WasDown(GenericInput control, int index = -1) { + switch (control.Type) { + case GenericInput.InputType.Keyboard: + return this.WasKeyDown(control); + case GenericInput.InputType.Gamepad: + return this.WasGamepadButtonDown(control, index); + case GenericInput.InputType.Mouse: + return this.WasMouseButtonDown(control); + default: + return false; + } + } + + /// + /// Returns if a given control of any kind was up in the last update call. + /// This is a helper function that can be passed a , or . + /// + /// The control whose up state to query + /// The index of the gamepad to query (if applicable), or -1 for any gamepad + /// Whether the given control was up. + /// If the passed control isn't of a supported type + public bool WasUp(GenericInput control, int index = -1) { + switch (control.Type) { + case GenericInput.InputType.Keyboard: + return this.WasKeyUp(control); + case GenericInput.InputType.Gamepad: + return this.WasGamepadButtonUp(control, index); + case GenericInput.InputType.Mouse: + return this.WasMouseButtonUp(control); + default: + return true; + } + } + /// /// Returns if a given control of any kind is pressed. /// This is a helper function that can be passed a , or . diff --git a/MLEM/Input/Keybind.cs b/MLEM/Input/Keybind.cs index ee501f2..4b5f91e 100644 --- a/MLEM/Input/Keybind.cs +++ b/MLEM/Input/Keybind.cs @@ -123,6 +123,21 @@ namespace MLEM.Input { return false; } + /// + /// Returns whether this keybind was considered to be down in the last update call. + /// See for more information. + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// Whether this keybind was considered to be down + public bool WasDown(InputHandler handler, int gamepadIndex = -1) { + foreach (var combination in this.combinations) { + if (combination.WasDown(handler, gamepadIndex)) + return true; + } + return false; + } + /// /// Returns whether this keybind is considered to be pressed. /// See for more information. @@ -183,6 +198,21 @@ namespace MLEM.Input { return false; } + /// + /// Returns whether any of this keybind's modifier keys were down in the last update call. + /// See for more information. + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// Whether any of this keyboard's modifier keys were down + public bool WasModifierDown(InputHandler handler, int gamepadIndex = -1) { + foreach (var combination in this.combinations) { + if (combination.WasModifierDown(handler, gamepadIndex)) + return true; + } + return false; + } + /// /// Returns the amount of time that this keybind has been held down for. /// If this input isn't currently down, this method returns . @@ -320,7 +350,7 @@ namespace MLEM.Input { } /// - /// Returns whether this combination is currently down + /// Returns whether this combination is currently down. /// See for more information. /// /// The input handler to query the keys with @@ -330,6 +360,17 @@ namespace MLEM.Input { return this.IsModifierDown(handler, gamepadIndex) && handler.IsDown(this.Key, gamepadIndex); } + /// + /// Returns whether this combination was down in the last upate call. + /// See for more information. + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// Whether this combination was down + public bool WasDown(InputHandler handler, int gamepadIndex = -1) { + return this.WasModifierDown(handler, gamepadIndex) && handler.WasDown(this.Key, gamepadIndex); + } + /// /// Returns whether this combination is currently pressed. /// See for more information. @@ -380,6 +421,22 @@ namespace MLEM.Input { return false; } + /// + /// Returns whether this combination's modifier keys were down in the last update call. + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// Whether this combination's modifiers were down + public bool WasModifierDown(InputHandler handler, int gamepadIndex = -1) { + if (this.Modifiers.Length <= 0) + return true; + foreach (var modifier in this.Modifiers) { + if (handler.WasDown(modifier, gamepadIndex)) + return true; + } + return false; + } + /// /// Returns the amount of time that this combination has been held down for. /// If this input isn't currently down, this method returns .