From 84691852978ffc2ce682ebaa06938973a38a7241 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 8 Nov 2022 16:43:32 +0100 Subject: [PATCH] Added GetDownTime, GetUpTime and GetTimeSincePress to Keybind and Combination --- CHANGELOG.md | 1 + MLEM/Input/Keybind.cs | 66 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5394dd7..be61a82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +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 the ability to find paths to one of multiple goals using AStar** Improvements diff --git a/MLEM/Input/Keybind.cs b/MLEM/Input/Keybind.cs index 78ad1b4..ee501f2 100644 --- a/MLEM/Input/Keybind.cs +++ b/MLEM/Input/Keybind.cs @@ -183,6 +183,39 @@ namespace MLEM.Input { 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 . + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// The resulting down time, or if the input is not being held. + public TimeSpan GetDownTime(InputHandler handler, int gamepadIndex = -1) { + return this.combinations.Max(c => c.GetDownTime(handler, gamepadIndex)); + } + + /// + /// Returns the amount of time that this keybind has been up for since the last time it was down. + /// If this input isn't currently up, this method returns . + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// The resulting up time, or if the input is being held. + public TimeSpan GetUpTime(InputHandler handler, int gamepadIndex = -1) { + return this.combinations.Min(c => c.GetUpTime(handler, gamepadIndex)); + } + + /// + /// Returns the amount of time that has passed since this keybind last counted as pressed. + /// If this input hasn't been pressed previously, or is currently pressed, this method returns . + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// The resulting up time, or if the input has never been pressed, or is currently pressed. + public TimeSpan GetTimeSincePress(InputHandler handler, int gamepadIndex = -1) { + return this.combinations.Min(c => c.GetTimeSincePress(handler, gamepadIndex)); + } + /// /// Returns an enumerable of all of the combinations that this keybind currently contains /// @@ -347,6 +380,39 @@ namespace MLEM.Input { 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 . + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// The resulting down time, or if the input is not being held. + public TimeSpan GetDownTime(InputHandler handler, int gamepadIndex = -1) { + return handler.GetDownTime(this.Key, gamepadIndex); + } + + /// + /// Returns the amount of time that this combination has been up for since the last time it was down. + /// If this input isn't currently up, this method returns . + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// The resulting up time, or if the input is being held. + public TimeSpan GetUpTime(InputHandler handler, int gamepadIndex = -1) { + return handler.GetUpTime(this.Key, gamepadIndex); + } + + /// + /// Returns the amount of time that has passed since this combination last counted as pressed. + /// If this input hasn't been pressed previously, or is currently pressed, this method returns . + /// + /// The input handler to query the keys with + /// The index of the gamepad to query, or -1 to query all gamepads + /// The resulting up time, or if the input has never been pressed, or is currently pressed. + public TimeSpan GetTimeSincePress(InputHandler handler, int gamepadIndex = -1) { + return handler.GetTimeSincePress(this.Key, gamepadIndex); + } + /// /// Converts this combination into an easily human-readable string. /// When using , this method is used with set to " + ".