From 91281f2c5cb83559b333b8f356af01f788e4921d Mon Sep 17 00:00:00 2001 From: KlutzyBubbles Date: Sun, 28 Jan 2024 00:04:28 +1100 Subject: [PATCH 1/8] Add support for interchangable mouse / keyboard binds --- BetterEmote/Plugin.cs | 8 ++++---- ModPackage/BetterEmotes.dll | Bin 53760 -> 54272 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BetterEmote/Plugin.cs b/BetterEmote/Plugin.cs index f565a87..b9ae8cf 100644 --- a/BetterEmote/Plugin.cs +++ b/BetterEmote/Plugin.cs @@ -94,7 +94,7 @@ private void ConfigFile() defaultEmoteKey = $"/{emoteNumber % 10}"; } ConfigEntry keyConfig = Config.Bind("Emote Keys", $"{name} Key", defaultEmoteKey, $"Default keybind for {name} emote"); - Settings.defaultKeyList[emoteNumber] = Settings.validatePrefix("", keyConfig.Value); + Settings.defaultKeyList[emoteNumber] = Settings.validatePrefixes(["", ""], "", keyConfig.Value); ConfigEntry controllerConfig = Config.Bind("Emote Controller Bindings", $"{name} Button", "", $"Default controller binding for {name} emote"); Settings.defaultControllerList[emoteNumber] = Settings.validatePrefix("", controllerConfig.Value); } @@ -102,15 +102,15 @@ private void ConfigFile() Settings.enabledList[EmoteDefs.getEmoteNumber(name)] = enabledConfig.Value; } ConfigEntry configEmoteKey = Config.Bind("Emote Keys", "Emote Wheel Key", Settings.emoteWheelKey, "Default keybind for the emote wheel"); - Settings.emoteWheelKey = Settings.validatePrefix("", configEmoteKey.Value); + Settings.emoteWheelKey = Settings.validatePrefixes(["", ""], "", configEmoteKey.Value); ConfigEntry configEmoteController = Config.Bind("Emote Controller Bindings", "Emote Wheel Button", Settings.emoteWheelController, "Default controller binding for the emote wheel"); Settings.emoteWheelController = Settings.validatePrefix("", configEmoteController.Value); ConfigEntry configEmoteNextKey = Config.Bind("Emote Keys", "Emote Wheel Next Page Key", Settings.emoteWheelNextKey, "Default keybind for the emote wheel next page"); - Settings.emoteWheelNextKey = Settings.validatePrefix("", configEmoteNextKey.Value); + Settings.emoteWheelNextKey = Settings.validatePrefixes(["", ""], "", configEmoteNextKey.Value); ConfigEntry configEmoteNextController = Config.Bind("Emote Controller Bindings", "Emote Wheel Next Page Button", Settings.emoteWheelNextController, "Default controller binding for the emote wheel next page"); Settings.emoteWheelNextController = Settings.validatePrefix("", configEmoteNextController.Value); ConfigEntry configEmotePreviousKey = Config.Bind("Emote Keys", "Emote Wheel Previous Page Key", Settings.emoteWheelPreviousKey, "Default keybind for the emote wheel previous page"); - Settings.emoteWheelPreviousKey = Settings.validatePrefix("", configEmotePreviousKey.Value); + Settings.emoteWheelPreviousKey = Settings.validatePrefixes(["", ""], "", configEmotePreviousKey.Value); ConfigEntry configEmotePreviousController = Config.Bind("Emote Controller Bindings", "Emote Wheel Previous Page Button", Settings.emoteWheelPreviousController, "Default controller binding for the emote wheel previous page"); Settings.emoteWheelPreviousController = Settings.validatePrefix("", configEmotePreviousController.Value); diff --git a/ModPackage/BetterEmotes.dll b/ModPackage/BetterEmotes.dll index cffc375a96c7a1782f3865da25a82a36b54dd645..5c93498b9a698ce4c52f0bf469c58999b0361e72 100644 GIT binary patch delta 17887 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 delta 17733 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 Date: Sun, 28 Jan 2024 00:04:39 +1100 Subject: [PATCH 2/8] Update logging to actually output array --- BetterEmote/Utils/Settings.cs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/BetterEmote/Utils/Settings.cs b/BetterEmote/Utils/Settings.cs index 3e82704..959c024 100644 --- a/BetterEmote/Utils/Settings.cs +++ b/BetterEmote/Utils/Settings.cs @@ -1,4 +1,5 @@ using HarmonyLib; +using System; namespace BetterEmote.Utils { @@ -40,9 +41,9 @@ public static void debugAllSettings() Plugin.Debug($"debug: {debug}"); Plugin.Debug($"trace: {trace}"); Plugin.Debug($"stopOnOuter: {stopOnOuter}"); - Plugin.Debug($"enabledList: {enabledList}"); - Plugin.Debug($"defaultKeyList: {defaultKeyList}"); - Plugin.Debug($"defaultControllerList: {defaultControllerList}"); + Plugin.Debug($"enabledList: {String.Join(", ", enabledList)}"); + Plugin.Debug($"defaultKeyList: {String.Join(", ", defaultKeyList)}"); + Plugin.Debug($"defaultControllerList: {String.Join(", ", defaultControllerList)}"); Plugin.Debug($"emoteWheelKey: {emoteWheelKey}"); Plugin.Debug($"emoteWheelController: {emoteWheelController}"); Plugin.Debug($"emoteWheelNextKey: {emoteWheelNextKey}"); @@ -67,7 +68,23 @@ public static float validateGreaterThanEqualToZero(float value) public static string validatePrefix(string prefix, string value) { - return value.Equals("") ? "" : (value.ToLower().StartsWith(prefix.ToLower()) ? value : $"{prefix}/{value}"); + return validatePrefixes([prefix], prefix, value); + } + + public static string validatePrefixes(string[] prefixes, string defaultPrefix, string value) + { + if (value.Equals("")) + { + return $""; + } + foreach (string prefix in prefixes) + { + if (value.ToLower().StartsWith(prefix.ToLower())) + { + return value; + } + } + return $"{defaultPrefix}/{value}"; } } } From bd4f69bb2fa712565c26603967934722dbfe8828 Mon Sep 17 00:00:00 2001 From: KlutzyBubbles Date: Sun, 28 Jan 2024 01:16:55 +1100 Subject: [PATCH 3/8] Move settings to InputBind and add sign submit / cancel binds --- BetterEmote/AssetScripts/SignUI.cs | 25 ++--------- BetterEmote/Patches/EmoteKeybindPatch.cs | 30 +++++++++++++ BetterEmote/Plugin.cs | 40 ++++++++--------- BetterEmote/Utils/Keybinds.cs | 36 ++++++++++++---- BetterEmote/Utils/Settings.cs | 52 +++++++++++++++-------- ModPackage/BetterEmotes.dll | Bin 54272 -> 54784 bytes 6 files changed, 115 insertions(+), 68 deletions(-) diff --git a/BetterEmote/AssetScripts/SignUI.cs b/BetterEmote/AssetScripts/SignUI.cs index 4866c32..6921a0c 100644 --- a/BetterEmote/AssetScripts/SignUI.cs +++ b/BetterEmote/AssetScripts/SignUI.cs @@ -62,30 +62,11 @@ private void Update() Plugin.Debug("SignUI Player isnt performing emote"); Close(true); } - if (Keyboard.current[Key.Enter].wasPressedThisFrame && !Keyboard.current[Key.LeftShift].isPressed) - { - Plugin.Debug("Enter was pressed without shift"); - SubmitText(); - } - if (Player.quickMenuManager.isMenuOpen || EmoteKeybindPatch.emoteWheelIsOpened || Mouse.current["rightButton"].IsPressed(0f)) + if (Player.quickMenuManager.isMenuOpen || EmoteKeybindPatch.emoteWheelIsOpened) { Plugin.Debug("Menu is open or right mouse button is clicked"); Close(true); } - if (Gamepad.all.Count != 0) - { - Plugin.Trace("Has gamepad"); - if (Gamepad.current.buttonWest.isPressed || Gamepad.current.startButton.isPressed) - { - Plugin.Debug("Button west or start button pressed"); - SubmitText(); - } - if (Gamepad.current.buttonEast.isPressed || Gamepad.current.selectButton.isPressed) - { - Plugin.Debug("Button east or select button pressed"); - Close(true); - } - } } private void FindComponents() @@ -110,7 +91,7 @@ private void UpdatePreviewText(string text) _previewText.text = text; } - private void SubmitText() + public void SubmitText() { Plugin.Debug("SignUI.SubmitText()"); if (_inputField.text.Equals(string.Empty)) @@ -131,7 +112,7 @@ private void SubmitText() } } - private void Close(bool cancelAction) + public void Close(bool cancelAction) { Plugin.Debug($"SignUI.Close({cancelAction})"); Player.isTypingChat = false; diff --git a/BetterEmote/Patches/EmoteKeybindPatch.cs b/BetterEmote/Patches/EmoteKeybindPatch.cs index e215f9a..fc30515 100644 --- a/BetterEmote/Patches/EmoteKeybindPatch.cs +++ b/BetterEmote/Patches/EmoteKeybindPatch.cs @@ -39,6 +39,8 @@ private static void StartPostfix(PlayerControllerB __instance) Settings.keybinds.Prisyadka.performed += onEmoteKeyPrisyadka; Settings.keybinds.Sign.performed += onEmoteKeySign; Settings.keybinds.Twerk.performed += onEmoteKeyTwerk; + Settings.keybinds.SignSubmit.performed += onSignKeySubmit; + Settings.keybinds.SignCancel.performed += onSignKeyCancel; Settings.keybinds.EmoteWheel.started += onEmoteKeyWheelStarted; Settings.keybinds.EmoteWheel.canceled += onEmoteKeyWheelCanceled; Settings.keybinds.EmoteWheelNextPage.performed += onEmoteKeyWheelNext; @@ -51,6 +53,8 @@ private static void StartPostfix(PlayerControllerB __instance) Settings.keybinds.Prisyadka.Enable(); Settings.keybinds.Sign.Enable(); Settings.keybinds.Twerk.Enable(); + Settings.keybinds.SignSubmit.Enable(); + Settings.keybinds.SignCancel.Enable(); Settings.keybinds.EmoteWheel.Enable(); Settings.keybinds.EmoteWheelNextPage.Enable(); Settings.keybinds.EmoteWheelPreviousPage.Enable(); @@ -72,6 +76,8 @@ public static void OnDisablePostfix(PlayerControllerB __instance) Settings.keybinds.Prisyadka.performed -= onEmoteKeyPrisyadka; Settings.keybinds.Sign.performed -= onEmoteKeySign; Settings.keybinds.Twerk.performed -= onEmoteKeyTwerk; + Settings.keybinds.SignSubmit.performed -= onSignKeySubmit; + Settings.keybinds.SignCancel.performed -= onSignKeyCancel; Settings.keybinds.EmoteWheel.started -= onEmoteKeyWheelStarted; Settings.keybinds.EmoteWheel.canceled -= onEmoteKeyWheelCanceled; Settings.keybinds.EmoteWheelNextPage.performed -= onEmoteKeyWheelNext; @@ -84,12 +90,36 @@ public static void OnDisablePostfix(PlayerControllerB __instance) Settings.keybinds.Prisyadka.Disable(); Settings.keybinds.Sign.Disable(); Settings.keybinds.Twerk.Disable(); + Settings.keybinds.SignSubmit.Disable(); + Settings.keybinds.SignCancel.Disable(); Settings.keybinds.EmoteWheel.Disable(); Settings.keybinds.EmoteWheelNextPage.Disable(); Settings.keybinds.EmoteWheelPreviousPage.Disable(); } } + public static void onSignKeySubmit(InputAction.CallbackContext context) + { + Plugin.Debug("onSignKeySubmit()"); + if (Keyboard.current[Key.RightShift].isPressed || Keyboard.current[Key.LeftShift].isPressed) + { + Plugin.Debug("They have one of the shifts pressed"); + return; + } + if (!Settings.disableSelfEmote && EmotePatch.customSignInputField != null && EmotePatch.customSignInputField.IsSignUIOpen) + { + EmotePatch.customSignInputField.SubmitText(); + } + } + + public static void onSignKeyCancel(InputAction.CallbackContext context) + { + Plugin.Debug("onSignKeyCancel()"); + if (!Settings.disableSelfEmote && EmotePatch.customSignInputField != null && EmotePatch.customSignInputField.IsSignUIOpen) + { + EmotePatch.customSignInputField.Close(true); + } + } public static void onEmoteKeyWheelStarted(InputAction.CallbackContext context) { diff --git a/BetterEmote/Plugin.cs b/BetterEmote/Plugin.cs index b9ae8cf..ca0e187 100644 --- a/BetterEmote/Plugin.cs +++ b/BetterEmote/Plugin.cs @@ -81,8 +81,7 @@ private void LoadAssets() private void ConfigFile() { Settings.enabledList = new bool[EmoteDefs.getEmoteCount() + 1]; - Settings.defaultKeyList = new string[EmoteDefs.getEmoteCount() + 1]; - Settings.defaultControllerList = new string[EmoteDefs.getEmoteCount() + 1]; + Settings.defaultInputList = new InputBind[EmoteDefs.getEmoteCount() + 1]; foreach (string name in Enum.GetNames(typeof(Emote))) { if (EmoteDefs.getEmoteNumber(name) > 2) @@ -94,28 +93,31 @@ private void ConfigFile() defaultEmoteKey = $"/{emoteNumber % 10}"; } ConfigEntry keyConfig = Config.Bind("Emote Keys", $"{name} Key", defaultEmoteKey, $"Default keybind for {name} emote"); - Settings.defaultKeyList[emoteNumber] = Settings.validatePrefixes(["", ""], "", keyConfig.Value); ConfigEntry controllerConfig = Config.Bind("Emote Controller Bindings", $"{name} Button", "", $"Default controller binding for {name} emote"); - Settings.defaultControllerList[emoteNumber] = Settings.validatePrefix("", controllerConfig.Value); + Settings.defaultInputList[emoteNumber] = new InputBind( + Settings.validatePrefixes(["", ""], "", keyConfig.Value), + Settings.validatePrefix("", controllerConfig.Value)); } ConfigEntry enabledConfig = Config.Bind("Enabled Emotes", $"Enable {name}", true, $"Toggle {name} emote key"); Settings.enabledList[EmoteDefs.getEmoteNumber(name)] = enabledConfig.Value; } - ConfigEntry configEmoteKey = Config.Bind("Emote Keys", "Emote Wheel Key", Settings.emoteWheelKey, "Default keybind for the emote wheel"); - Settings.emoteWheelKey = Settings.validatePrefixes(["", ""], "", configEmoteKey.Value); - ConfigEntry configEmoteController = Config.Bind("Emote Controller Bindings", "Emote Wheel Button", Settings.emoteWheelController, "Default controller binding for the emote wheel"); - Settings.emoteWheelController = Settings.validatePrefix("", configEmoteController.Value); - ConfigEntry configEmoteNextKey = Config.Bind("Emote Keys", "Emote Wheel Next Page Key", Settings.emoteWheelNextKey, "Default keybind for the emote wheel next page"); - Settings.emoteWheelNextKey = Settings.validatePrefixes(["", ""], "", configEmoteNextKey.Value); - ConfigEntry configEmoteNextController = Config.Bind("Emote Controller Bindings", "Emote Wheel Next Page Button", Settings.emoteWheelNextController, "Default controller binding for the emote wheel next page"); - Settings.emoteWheelNextController = Settings.validatePrefix("", configEmoteNextController.Value); - ConfigEntry configEmotePreviousKey = Config.Bind("Emote Keys", "Emote Wheel Previous Page Key", Settings.emoteWheelPreviousKey, "Default keybind for the emote wheel previous page"); - Settings.emoteWheelPreviousKey = Settings.validatePrefixes(["", ""], "", configEmotePreviousKey.Value); - ConfigEntry configEmotePreviousController = Config.Bind("Emote Controller Bindings", "Emote Wheel Previous Page Button", Settings.emoteWheelPreviousController, "Default controller binding for the emote wheel previous page"); - Settings.emoteWheelPreviousController = Settings.validatePrefix("", configEmotePreviousController.Value); - - ConfigEntry configEmoteControllerMove = Config.Bind("Emote Controller Bindings", "Emote Wheel Move", "/rightStick", "Default controller binding for the emote wheel movement"); - Settings.emoteWheelControllerMove = Settings.validatePrefix("", configEmoteControllerMove.Value); + ConfigEntry configEmoteKey = Config.Bind("Emote Keys", "Emote Wheel Key", Settings.emoteWheelInput.keyboard, "Default keybind for the emote wheel"); + Settings.emoteWheelInput.keyboard = Settings.validatePrefixes(["", ""], "", configEmoteKey.Value); + ConfigEntry configEmoteController = Config.Bind("Emote Controller Bindings", "Emote Wheel Button", Settings.emoteWheelInput.controller, "Default controller binding for the emote wheel"); + Settings.emoteWheelInput.controller = Settings.validatePrefix("", configEmoteController.Value); + + ConfigEntry configEmoteNextKey = Config.Bind("Emote Keys", "Emote Wheel Next Page Key", Settings.emoteWheelNextInput.keyboard, "Default keybind for the emote wheel next page"); + Settings.emoteWheelNextInput.keyboard = Settings.validatePrefixes(["", ""], "", configEmoteNextKey.Value); + ConfigEntry configEmoteNextController = Config.Bind("Emote Controller Bindings", "Emote Wheel Next Page Button", Settings.emoteWheelNextInput.controller, "Default controller binding for the emote wheel next page"); + Settings.emoteWheelNextInput.controller = Settings.validatePrefix("", configEmoteNextController.Value); + + ConfigEntry configEmotePreviousKey = Config.Bind("Emote Keys", "Emote Wheel Previous Page Key", Settings.emoteWheelPreviousInput.keyboard, "Default keybind for the emote wheel previous page"); + Settings.emoteWheelPreviousInput.keyboard = Settings.validatePrefixes(["", ""], "", configEmotePreviousKey.Value); + ConfigEntry configEmotePreviousController = Config.Bind("Emote Controller Bindings", "Emote Wheel Previous Page Button", Settings.emoteWheelPreviousInput.controller, "Default controller binding for the emote wheel previous page"); + Settings.emoteWheelPreviousInput.controller = Settings.validatePrefix("", configEmotePreviousController.Value); + + ConfigEntry configEmoteControllerMove = Config.Bind("Emote Controller Bindings", "Emote Wheel Move", "/rightStick", "Default controller binding for the emote wheel movement"); + Settings.emoteWheelMoveInput.controller = Settings.validatePrefix("", configEmoteControllerMove.Value); ConfigEntry configEmoteControllerDeadzone = Config.Bind("Emote Controller Bindings", "Emote Wheel Deadzone", 0.25f, "Default controller deadzone for emote selection"); Settings.controllerDeadzone = Settings.validateGreaterThanEqualToZero(configEmoteControllerDeadzone.Value); diff --git a/BetterEmote/Utils/Keybinds.cs b/BetterEmote/Utils/Keybinds.cs index 5b13e11..6351e06 100644 --- a/BetterEmote/Utils/Keybinds.cs +++ b/BetterEmote/Utils/Keybinds.cs @@ -15,6 +15,10 @@ public class Keybinds : LcInputActions public InputAction Salute => Asset["Salute"]; public InputAction Prisyadka => Asset["Prisyadka"]; public InputAction Sign => Asset["Sign"]; + + public InputAction SignSubmit => Asset["SignSubmit"]; + public InputAction SignCancel => Asset["SignCancel"]; + public InputAction EmoteWheel => Asset["EmoteWheel"]; public InputAction EmoteWheelNextPage => Asset["EmoteWheelNextPage"]; public InputAction EmoteWheelPreviousPage => Asset["EmoteWheelPreviousPage"]; @@ -30,38 +34,52 @@ public override void CreateInputActions(in InputActionMapBuilder builder) builder.NewActionBinding() .WithActionId(name) .WithActionType(InputActionType.Button) - .WithKbmPath(Settings.defaultKeyList[EmoteDefs.getEmoteNumber(name)]) + .WithKbmPath(Settings.defaultInputList[EmoteDefs.getEmoteNumber(name)].keyboard) .WithBindingName(name) - .WithGamepadPath(Settings.defaultControllerList[EmoteDefs.getEmoteNumber(name)]) + .WithGamepadPath(Settings.defaultInputList[EmoteDefs.getEmoteNumber(name)].controller) .Finish(); } } + builder.NewActionBinding() + .WithActionId("SignSubmit") + .WithActionType(InputActionType.Button) + .WithKbmPath(Settings.signSubmitInput.keyboard) + .WithGamepadPath(Settings.signSubmitInput.controller) + .WithBindingName("Sign Submit") + .Finish(); + builder.NewActionBinding() + .WithActionId("SignCancel") + .WithActionType(InputActionType.Button) + .WithKbmPath(Settings.signCancelInput.keyboard) + .WithGamepadPath(Settings.signCancelInput.controller) + .WithBindingName("Sign Cancel") + .Finish(); builder.NewActionBinding() .WithActionId("EmoteWheel") .WithActionType(InputActionType.Button) - .WithKbmPath(Settings.emoteWheelKey) - .WithGamepadPath(Settings.emoteWheelController) + .WithKbmPath(Settings.emoteWheelInput.keyboard) + .WithGamepadPath(Settings.emoteWheelInput.controller) .WithBindingName("Emote Wheel") .Finish(); builder.NewActionBinding() .WithActionId("EmoteWheelNextPage") .WithActionType(InputActionType.Button) - .WithKbmPath(Settings.emoteWheelNextKey) - .WithGamepadPath(Settings.emoteWheelNextController) + .WithKbmPath(Settings.emoteWheelNextInput.keyboard) + .WithGamepadPath(Settings.emoteWheelNextInput.controller) .WithBindingName("Emote Wheel Next Page") .Finish(); builder.NewActionBinding() .WithActionId("EmoteWheelPreviousPage") .WithActionType(InputActionType.Button) - .WithKbmPath(Settings.emoteWheelPreviousKey) - .WithGamepadPath(Settings.emoteWheelPreviousController) + .WithKbmPath(Settings.emoteWheelPreviousInput.keyboard) + .WithGamepadPath(Settings.emoteWheelPreviousInput.controller) .WithBindingName("Emote Wheel Previous Page") .Finish(); builder.NewActionBinding() .WithActionId("EmoteWheelController") .WithActionType(InputActionType.Value) .WithKbmPath("") - .WithGamepadPath(Settings.emoteWheelControllerMove) + .WithGamepadPath(Settings.emoteWheelMoveInput.controller) .WithBindingName("Emote Wheel CONTROLLER ONLY") .Finish(); } diff --git a/BetterEmote/Utils/Settings.cs b/BetterEmote/Utils/Settings.cs index 959c024..f4996c1 100644 --- a/BetterEmote/Utils/Settings.cs +++ b/BetterEmote/Utils/Settings.cs @@ -13,16 +13,18 @@ public class Settings public static bool stopOnOuter = false; public static bool[] enabledList = []; - public static string[] defaultKeyList = []; - public static string[] defaultControllerList = []; - public static string emoteWheelKey = "/v"; - public static string emoteWheelController = "/leftShoulder"; - public static string emoteWheelNextKey = "/scroll/up"; - public static string emoteWheelNextController = "/dpad/right"; - public static string emoteWheelPreviousKey = "/scroll/down"; - public static string emoteWheelPreviousController = "/dpad/left"; - public static string emoteWheelControllerMove = "/rightStick"; + public static InputBind[] defaultInputList = []; + + public static InputBind emoteWheelInput = new InputBind("/v", "/leftShoulder"); + + public static InputBind emoteWheelNextInput = new InputBind("/scroll/up", "/dpad/right"); + public static InputBind emoteWheelPreviousInput = new InputBind("/scroll/down", "/dpad/left"); + + public static InputBind emoteWheelMoveInput = new InputBind("", "/rightStick"); + + public static InputBind signSubmitInput = new InputBind("/enter", "/buttonWest"); + public static InputBind signCancelInput = new InputBind("/rightButton", "/buttonEast"); public static float griddySpeed = 0.5f; public static float prisyadkaSpeed = 0.34f; @@ -42,15 +44,13 @@ public static void debugAllSettings() Plugin.Debug($"trace: {trace}"); Plugin.Debug($"stopOnOuter: {stopOnOuter}"); Plugin.Debug($"enabledList: {String.Join(", ", enabledList)}"); - Plugin.Debug($"defaultKeyList: {String.Join(", ", defaultKeyList)}"); - Plugin.Debug($"defaultControllerList: {String.Join(", ", defaultControllerList)}"); - Plugin.Debug($"emoteWheelKey: {emoteWheelKey}"); - Plugin.Debug($"emoteWheelController: {emoteWheelController}"); - Plugin.Debug($"emoteWheelNextKey: {emoteWheelNextKey}"); - Plugin.Debug($"emoteWheelNextController: {emoteWheelNextController}"); - Plugin.Debug($"emoteWheelPreviousKey: {emoteWheelPreviousKey}"); - Plugin.Debug($"emoteWheelPreviousController: {emoteWheelPreviousController}"); - Plugin.Debug($"emoteWheelControllerMove: {emoteWheelControllerMove}"); + Plugin.Debug($"defaultInputList: {String.Join(", ", defaultInputList)}"); + Plugin.Debug($"emoteWheelInput: {emoteWheelInput}"); + Plugin.Debug($"emoteWheelNextInput: {emoteWheelNextInput}"); + Plugin.Debug($"emoteWheelPreviousInput: {emoteWheelPreviousInput}"); + Plugin.Debug($"emoteWheelMoveInput: {emoteWheelMoveInput}"); + Plugin.Debug($"signSubmitInput: {signSubmitInput}"); + Plugin.Debug($"signCancelInput: {signCancelInput}"); Plugin.Debug($"griddySpeed: {griddySpeed}"); Plugin.Debug($"prisyadkaSpeed: {prisyadkaSpeed}"); Plugin.Debug($"emoteCooldown: {emoteCooldown}"); @@ -87,4 +87,20 @@ public static string validatePrefixes(string[] prefixes, string defaultPrefix, s return $"{defaultPrefix}/{value}"; } } + + public struct InputBind + { + public string keyboard = ""; + public string controller = ""; + + public InputBind(string keyboard, string controller) { + this.keyboard = keyboard; + this.controller = controller; + } + + public override string ToString() + { + return $"('{keyboard}', '{controller}')"; + } + } } diff --git a/ModPackage/BetterEmotes.dll b/ModPackage/BetterEmotes.dll index 5c93498b9a698ce4c52f0bf469c58999b0361e72..b56d951ee55afd4ce5ba386c4532c91657f87507 100644 GIT binary patch delta 22002 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 From 2bb46c69f5bfb71a49f1399457ef8caa6a42a5df Mon Sep 17 00:00:00 2001 From: KlutzyBubbles Date: Sun, 28 Jan 2024 12:58:50 +1100 Subject: [PATCH 4/8] Add signui text rebindings and controller bindings to emote wheel --- BetterEmote/AssetScripts/EmoteWheel.cs | 10 +++++----- BetterEmote/AssetScripts/SignUI.cs | 14 ++++++++++++++ BetterEmote/Plugin.cs | 9 +++++++++ BetterEmote/Utils/Keybinds.cs | 22 ++++++++++++++++++++++ ModPackage/BetterEmotes.dll | Bin 54784 -> 56320 bytes 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/BetterEmote/AssetScripts/EmoteWheel.cs b/BetterEmote/AssetScripts/EmoteWheel.cs index 8d12590..f6179f6 100644 --- a/BetterEmote/AssetScripts/EmoteWheel.cs +++ b/BetterEmote/AssetScripts/EmoteWheel.cs @@ -38,7 +38,7 @@ internal class EmoteWheel : MonoBehaviour public Vector2 controllerValue = Vector2.zero; public static string[] emoteNames; - public static string[] emoteKeybinds; + public static InputBind[] emoteKeybinds; private Vector2 centerScreen; @@ -60,10 +60,10 @@ private void Awake() private void OnEnable() { Plugin.Debug("EmoteWheel.OnEnable()"); - emoteKeybinds = new string[EmoteDefs.getEmoteCount() + 1]; + emoteKeybinds = new InputBind[EmoteDefs.getEmoteCount() + 1]; foreach (string name in Enum.GetNames(typeof(Emote))) { - emoteKeybinds[EmoteDefs.getEmoteNumber(name) - 1] = Settings.keybinds.getByEmote(EmoteDefs.getEmote(name)).GetBindingDisplayString(0, 0); + emoteKeybinds[EmoteDefs.getEmoteNumber(name) - 1] = Keybinds.getDisplayStrings(Settings.keybinds.getByEmote(EmoteDefs.getEmote(name))); } centerScreen = new Vector2(Screen.width / 2, Screen.height / 2); Cursor.visible = true; @@ -254,7 +254,7 @@ private void updatePageInfo() private void displayEmoteInfo() { Plugin.Trace($"EmoteWheel.displayEmoteInfo({selectedEmoteID})"); - string text = selectedEmoteID > emoteKeybinds.Length ? "" : emoteKeybinds[selectedEmoteID - 1]; + InputBind bind = selectedEmoteID > emoteKeybinds.Length ? new InputBind("", "") : emoteKeybinds[selectedEmoteID - 1]; string text2; if (selectedEmoteID <= Enum.GetValues(typeof(Emote)).Length) { @@ -267,7 +267,7 @@ private void displayEmoteInfo() Plugin.Trace("selectedEmoteID out of range of emotes"); text2 = "EMPTY"; } - emoteInformation.text = $"{text2 ?? ""}\n[{(text ?? "").ToUpper()}]"; + emoteInformation.text = $"{text2 ?? ""}\n{Keybinds.formatInputBind(bind)}"; } private void updateSelectionArrow() { diff --git a/BetterEmote/AssetScripts/SignUI.cs b/BetterEmote/AssetScripts/SignUI.cs index 6921a0c..9e99595 100644 --- a/BetterEmote/AssetScripts/SignUI.cs +++ b/BetterEmote/AssetScripts/SignUI.cs @@ -16,6 +16,8 @@ public class SignUI : MonoBehaviour private TMP_InputField _inputField; private Text _charactersLeftText; + private Text _submitText; + private Text _cancelText; private TMP_Text _previewText; @@ -49,9 +51,19 @@ private void OnEnable() _inputField.Select(); _inputField.text = string.Empty; _previewText.text = "PREVIEW"; + updateKeybindText(); Player.disableLookInput = true; } + public void updateKeybindText() + { + Plugin.Debug("SignUI.updateKeybindText()"); + InputBind submit = Keybinds.getDisplayStrings(Settings.keybinds.SignSubmit); + InputBind cancel = Keybinds.getDisplayStrings(Settings.keybinds.SignCancel); + _submitText.text = $"{Keybinds.formatInputBind(submit)} Submit"; + _cancelText.text = $"{Keybinds.formatInputBind(cancel)} Cancel"; + } + private void Update() { Plugin.Trace("SignUI.Update()"); @@ -77,6 +89,8 @@ private void FindComponents() _submitButton = transform.Find("Submit").GetComponent