From 70a1dcac622f271e4d10506abe6121c2791547fe Mon Sep 17 00:00:00 2001 From: SDraw Date: Wed, 19 Feb 2025 22:49:36 +0300 Subject: [PATCH] Changeable keys for hands --- ml_pam/ArmMover.cs | 11 +++--- ml_pam/Properties/AssemblyInfo.cs | 2 +- ml_pam/Settings.cs | 60 +++++++++++++++++++++++++++---- ml_pam/ml_pam.csproj | 2 +- 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/ml_pam/ArmMover.cs b/ml_pam/ArmMover.cs index 79264c7..6f3d7e8 100644 --- a/ml_pam/ArmMover.cs +++ b/ml_pam/ArmMover.cs @@ -24,9 +24,6 @@ namespace ml_pam public Transform m_rightHandTarget; } - const KeyCode c_leftKey = KeyCode.Q; - const KeyCode c_rightKey = KeyCode.E; - static ArmMover ms_instance = null; static readonly Quaternion ms_offsetLeft = Quaternion.Euler(270f, 90f, 0f); @@ -177,13 +174,13 @@ namespace ml_pam { case HandState.Empty: { - if(Settings.Enabled && Settings.HandsExtension && Input.GetKey(c_leftKey) && !ViewManager.Instance.IsAnyMenuOpen) + if(Settings.Enabled && Settings.HandsExtension && Input.GetKey(Settings.LeftHandKey) && !ViewManager.Instance.IsAnyMenuOpen) m_leftHandState = HandState.Extended; } break; case HandState.Extended: { - if(!Input.GetKey(c_leftKey)) + if(!Input.GetKey(Settings.LeftHandKey)) m_leftHandState = HandState.Empty; } break; @@ -192,13 +189,13 @@ namespace ml_pam { case HandState.Empty: { - if(Settings.Enabled && Settings.HandsExtension && Input.GetKey(c_rightKey) && !ViewManager.Instance.IsAnyMenuOpen) + if(Settings.Enabled && Settings.HandsExtension && Input.GetKey(Settings.RightHandKey) && !ViewManager.Instance.IsAnyMenuOpen) m_rightHandState = HandState.Extended; } break; case HandState.Extended: { - if(!Input.GetKey(c_rightKey)) + if(!Input.GetKey(Settings.RightHandKey)) m_rightHandState = HandState.Empty; } break; diff --git a/ml_pam/Properties/AssemblyInfo.cs b/ml_pam/Properties/AssemblyInfo.cs index b6812ae..bc82f55 100644 --- a/ml_pam/Properties/AssemblyInfo.cs +++ b/ml_pam/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -[assembly: MelonLoader.MelonInfo(typeof(ml_pam.PickupArmMovement), "PickupArmMovement", "1.2.1-u6", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +[assembly: MelonLoader.MelonInfo(typeof(ml_pam.PickupArmMovement), "PickupArmMovement", "1.2.2-u6", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] [assembly: MelonLoader.MelonPriority(1)] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] diff --git a/ml_pam/Settings.cs b/ml_pam/Settings.cs index d7d5403..5ee76c3 100644 --- a/ml_pam/Settings.cs +++ b/ml_pam/Settings.cs @@ -1,6 +1,7 @@ using ABI_RC.Core.InteractionSystem; using System; using System.Collections.Generic; +using UnityEngine; namespace ml_pam { @@ -20,7 +21,9 @@ namespace ml_pam GrabOffset, LeadHand, HandsExtension, - ExtensionSpeed + ExtensionSpeed, + LeftHandKey, + RightHandKey } public enum LeadHand { @@ -34,6 +37,8 @@ namespace ml_pam public static LeadHand LeadingHand { get; private set; } = LeadHand.Right; public static bool HandsExtension { get; private set; } = true; public static float ExtensionSpeed { get; private set; } = 10f; + public static KeyCode LeftHandKey { get; private set; } = KeyCode.Q; + public static KeyCode RightHandKey { get; private set; } = KeyCode.E; static MelonLoader.MelonPreferences_Category ms_category = null; static List ms_entries = null; @@ -43,25 +48,34 @@ namespace ml_pam public static readonly SettingEvent OnLeadingHandChanged = new SettingEvent(); public static readonly SettingEvent OnHandsExtensionChanged = new SettingEvent(); public static readonly SettingEvent OnExtensionSpeedChanged = new SettingEvent(); + public static readonly SettingEvent OnLeftHandKeyChanged = new SettingEvent(); + public static readonly SettingEvent OnRightHandKeyChanged = new SettingEvent(); internal static void Init() { - ms_category = MelonLoader.MelonPreferences.CreateCategory("PAM", null, true); + ms_category = MelonLoader.MelonPreferences.CreateCategory("PAM", "Pickup Arm Movement"); ms_entries = new List() { - ms_category.CreateEntry(ModSetting.Enabled.ToString(), Enabled), - ms_category.CreateEntry(ModSetting.GrabOffset.ToString(), (int)(GrabOffset * 100f)), - ms_category.CreateEntry(ModSetting.LeadHand.ToString(), (int)LeadHand.Right), - ms_category.CreateEntry(ModSetting.HandsExtension.ToString(), HandsExtension), - ms_category.CreateEntry(ModSetting.ExtensionSpeed.ToString(), (int)ExtensionSpeed), + ms_category.CreateEntry(ModSetting.Enabled.ToString(), Enabled, null, null, true), + ms_category.CreateEntry(ModSetting.GrabOffset.ToString(), (int)(GrabOffset * 100f), null, null, true), + ms_category.CreateEntry(ModSetting.LeadHand.ToString(), (int)LeadHand.Right, null, null, true), + ms_category.CreateEntry(ModSetting.HandsExtension.ToString(), HandsExtension, null, null, true), + ms_category.CreateEntry(ModSetting.ExtensionSpeed.ToString(), (int)ExtensionSpeed, null, null, true), + ms_category.CreateEntry(ModSetting.LeftHandKey.ToString(), LeftHandKey, "Left hand key"), + ms_category.CreateEntry(ModSetting.RightHandKey.ToString(), RightHandKey, "Right hand key") }; + ms_entries[(int)ModSetting.LeftHandKey].OnEntryValueChangedUntyped.Subscribe(OnMelonSettingSave_LeftHandKey); + ms_entries[(int)ModSetting.RightHandKey].OnEntryValueChangedUntyped.Subscribe(OnMelonSettingSave_RightHandKey); + Enabled = (bool)ms_entries[(int)ModSetting.Enabled].BoxedValue; GrabOffset = (int)ms_entries[(int)ModSetting.GrabOffset].BoxedValue * 0.01f; LeadingHand = (LeadHand)(int)ms_entries[(int)ModSetting.LeadHand].BoxedValue; HandsExtension = (bool)ms_entries[(int)ModSetting.HandsExtension].BoxedValue; ExtensionSpeed = Math.Clamp((int)ms_entries[(int)ModSetting.ExtensionSpeed].BoxedValue, 1f, 50f); + LeftHandKey = (KeyCode)ms_entries[(int)ModSetting.LeftHandKey].BoxedValue; + RightHandKey = (KeyCode)ms_entries[(int)ModSetting.RightHandKey].BoxedValue; MelonLoader.MelonCoroutines.Start(WaitMainMenuUi()); } @@ -91,6 +105,38 @@ namespace ml_pam }; } + static void OnMelonSettingSave_LeftHandKey(object p_oldValue, object p_newValue) + { + try + { + if(p_newValue is KeyCode code) + { + LeftHandKey = code; + OnLeftHandKeyChanged.Invoke(LeftHandKey); + } + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + + static void OnMelonSettingSave_RightHandKey(object p_oldValue, object p_newValue) + { + try + { + if(p_newValue is KeyCode code) + { + RightHandKey = code; + OnRightHandKeyChanged.Invoke(RightHandKey); + } + } + catch(Exception e) + { + MelonLoader.MelonLogger.Error(e); + } + } + static void OnToggleUpdate(string p_name, string p_value) { try diff --git a/ml_pam/ml_pam.csproj b/ml_pam/ml_pam.csproj index 55c2dec..d711c0d 100644 --- a/ml_pam/ml_pam.csproj +++ b/ml_pam/ml_pam.csproj @@ -4,7 +4,7 @@ netstandard2.1 x64 PickupArmMovement - 1.2.1 + 1.2.2 SDraw SDraw PickupArmMovement