From be0d03e9e3e089d2be8f0512c562d25ff9889f90 Mon Sep 17 00:00:00 2001 From: D1GQ Date: Mon, 30 Mar 2026 02:37:21 -0500 Subject: [PATCH] Add ExtendedPassiveButton for touch support --- src/Helpers/PlayerControlHelper.cs | 2 +- src/Managers/BetterNotificationManager.cs | 2 +- src/Managers/NetworkManager.cs | 2 +- src/Modules/AntiCheat/BetterAntiCheat.cs | 2 +- src/Modules/AntiCheat/RPCHandler.cs | 2 +- .../RPCHandlers/Cheats/AUMChatHandler.cs | 2 +- .../RPCHandlers/Cheats/AUMHandler.cs | 2 +- .../Cheats/KillNetworkChatHandler.cs | 2 +- .../RPCHandlers/Cheats/KillNetworkHandler.cs | 2 +- .../Cheats/ModMenuCrewChatHandler.cs | 2 +- .../RPCHandlers/Cheats/ModMenuCrewHandler.cs | 2 +- .../RPCHandlers/Cheats/SickoHandler.cs | 2 +- .../AntiCheat/RPCHandlers/CheckNameHandler.cs | 2 +- .../RPCHandlers/CompleteTaskHandler.cs | 2 +- .../RPCHandlers/MurderPlayerHandler.cs | 2 +- .../AntiCheat/RPCHandlers/SetLevelHandler.cs | 2 +- .../AntiCheat/RPCHandlers/SetNameHandler.cs | 2 +- src/Modules/HandshakeHandler.cs | 2 +- src/Mono/Extended/ExtendedPassiveButton.cs | 142 ++++++++++++++++++ .../{ => Extended}/ExtendedPlayerControl.cs | 2 +- src/Mono/{ => Extended}/ExtendedPlayerInfo.cs | 2 +- src/Mono/MeetingInfoDisplay.cs | 1 + src/Mono/PlayerInfoDisplay.cs | 1 + src/Network/RPC.cs | 2 +- .../Client/OptionsMenuBehaviourPatch.cs | 2 +- .../Gameplay/Anticheat/PlatformSpoofPatch.cs | 2 +- src/Patches/Gameplay/LobbyPatch.cs | 35 +++-- .../Gameplay/Managers/RoleManagerPatch.cs | 2 +- .../Gameplay/Player/PlayerControlPatch.cs | 2 +- .../Gameplay/Player/PlayerJoinAndLeftPatch.cs | 2 +- src/Patches/Gameplay/RolePatch.cs | 2 +- src/Patches/Gameplay/UI/Chat/ChatPatch.cs | 2 +- src/Patches/Gameplay/UI/GameSummaryPatch.cs | 2 +- src/Patches/Gameplay/UI/MeetingHudPatch.cs | 1 + src/Patches/Gameplay/UI/PlayerTabPatch.cs | 47 ++---- 35 files changed, 202 insertions(+), 83 deletions(-) create mode 100644 src/Mono/Extended/ExtendedPassiveButton.cs rename src/Mono/{ => Extended}/ExtendedPlayerControl.cs (98%) rename src/Mono/{ => Extended}/ExtendedPlayerInfo.cs (99%) diff --git a/src/Helpers/PlayerControlHelper.cs b/src/Helpers/PlayerControlHelper.cs index 492ccc6..7f3db48 100644 --- a/src/Helpers/PlayerControlHelper.cs +++ b/src/Helpers/PlayerControlHelper.cs @@ -1,7 +1,7 @@ using AmongUs.GameOptions; using BetterAmongUs.Data; using BetterAmongUs.Modules; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.Player; using BetterAmongUs.Patches.Gameplay.UI.Settings; using InnerNet; diff --git a/src/Managers/BetterNotificationManager.cs b/src/Managers/BetterNotificationManager.cs index 7a26e6c..1c2278a 100644 --- a/src/Managers/BetterNotificationManager.cs +++ b/src/Managers/BetterNotificationManager.cs @@ -2,7 +2,7 @@ using BetterAmongUs.Data.Config; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Cpp2IL.Core.Extensions; using TMPro; diff --git a/src/Managers/NetworkManager.cs b/src/Managers/NetworkManager.cs index a8e2b80..0f625cb 100644 --- a/src/Managers/NetworkManager.cs +++ b/src/Managers/NetworkManager.cs @@ -4,7 +4,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; using BetterAmongUs.Modules.AntiCheat; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Network; using BetterAmongUs.Structs; using HarmonyLib; diff --git a/src/Modules/AntiCheat/BetterAntiCheat.cs b/src/Modules/AntiCheat/BetterAntiCheat.cs index 016774b..5a0a43a 100644 --- a/src/Modules/AntiCheat/BetterAntiCheat.cs +++ b/src/Modules/AntiCheat/BetterAntiCheat.cs @@ -6,7 +6,7 @@ using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.AntiCheat.RPCHandlers.NetObjectHandlers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Network; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; diff --git a/src/Modules/AntiCheat/RPCHandler.cs b/src/Modules/AntiCheat/RPCHandler.cs index 3935e96..79d50c0 100644 --- a/src/Modules/AntiCheat/RPCHandler.cs +++ b/src/Modules/AntiCheat/RPCHandler.cs @@ -2,7 +2,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using Hazel; using InnerNet; using UnityEngine; diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs index f0abc35..51c1f5e 100644 --- a/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs @@ -5,7 +5,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMHandler.cs index 08681b9..441ec2d 100644 --- a/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMHandler.cs @@ -5,7 +5,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs index 7344410..e21e188 100644 --- a/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs @@ -5,7 +5,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkHandler.cs index adbfb29..bfa609a 100644 --- a/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkHandler.cs @@ -5,7 +5,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewChatHandler.cs index 5a4f733..a0b0df7 100644 --- a/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewChatHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewChatHandler.cs @@ -5,7 +5,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewHandler.cs index 4b2ec2f..55fa47a 100644 --- a/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/ModMenuCrewHandler.cs @@ -5,7 +5,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/SickoHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/SickoHandler.cs index 02999b8..efecc9d 100644 --- a/src/Modules/AntiCheat/RPCHandlers/Cheats/SickoHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/SickoHandler.cs @@ -5,7 +5,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs index ca63453..c0e10cd 100644 --- a/src/Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs @@ -1,7 +1,7 @@ using BetterAmongUs.Attributes; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using Hazel; namespace BetterAmongUs.Modules.AntiCheat.RPCHandlers; diff --git a/src/Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs index a633e6a..51199f0 100644 --- a/src/Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs @@ -1,7 +1,7 @@ using BetterAmongUs.Attributes; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using Hazel; namespace BetterAmongUs.Modules.AntiCheat.RPCHandlers; diff --git a/src/Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs b/src/Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs index a5a0c03..9ecf5a8 100644 --- a/src/Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs @@ -2,7 +2,7 @@ using AmongUs.GameOptions; using BetterAmongUs.Attributes; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using Hazel; using InnerNet; diff --git a/src/Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs index 2a22623..992f82d 100644 --- a/src/Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs @@ -1,7 +1,7 @@ using BetterAmongUs.Attributes; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using Hazel; diff --git a/src/Modules/AntiCheat/RPCHandlers/SetNameHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetNameHandler.cs index 02ef262..f35db1e 100644 --- a/src/Modules/AntiCheat/RPCHandlers/SetNameHandler.cs +++ b/src/Modules/AntiCheat/RPCHandlers/SetNameHandler.cs @@ -1,7 +1,7 @@ using BetterAmongUs.Attributes; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using Hazel; namespace BetterAmongUs.Modules.AntiCheat.RPCHandlers; diff --git a/src/Modules/HandshakeHandler.cs b/src/Modules/HandshakeHandler.cs index af31172..277cb51 100644 --- a/src/Modules/HandshakeHandler.cs +++ b/src/Modules/HandshakeHandler.cs @@ -3,7 +3,7 @@ using BetterAmongUs.Data; using BetterAmongUs.Data.Config; using BetterAmongUs.Enums; using BetterAmongUs.Helpers; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Network; using Hazel; using Il2CppInterop.Runtime.Attributes; diff --git a/src/Mono/Extended/ExtendedPassiveButton.cs b/src/Mono/Extended/ExtendedPassiveButton.cs new file mode 100644 index 0000000..96fe289 --- /dev/null +++ b/src/Mono/Extended/ExtendedPassiveButton.cs @@ -0,0 +1,142 @@ +using BetterAmongUs.Modules; +using HarmonyLib; +using UnityEngine; + +namespace BetterAmongUs.Mono.Extended; + +/// +/// Extends PassiveButton with hold and shift-click functionality. +/// +internal class ExtendedPassiveButton : MonoBehaviour, IMonoExtension +{ + /// + /// Gets or sets the base PassiveButton instance. + /// + public PassiveButton? BaseMono { get; set; } + + /// + /// Triggered when the button has been held down for the duration specified by . + /// + public Action? OnHold = null; + + /// + /// Triggered either when the button is held (after hold trigger time) OR when shift-clicking. + /// + public Action? OnHoldOrShiftClick = null; + + /// + /// Triggered when shift-clicking the button (LeftShift + click). + /// + public Action? OnShiftClick = null; + + /// + /// Time in seconds the button must be held to trigger hold events. + /// + public float HoldTriggerTime = 0.5f; + + private bool m_isHolding; + private float m_holdTimer; + private bool m_suppressClick; + + private void Awake() + { + if (!this.RegisterExtension()) + return; + + BaseMono.OnDown = true; + } + + private void OnDestroy() + { + this.UnregisterExtension(); + } + + private void Update() + { + if (m_isHolding) + { + m_holdTimer += Time.deltaTime; + if (m_holdTimer >= HoldTriggerTime) + { + BaseMono.ReceiveClickUp(); + } + } + } + + /// + /// Called when the button is pressed down to start tracking hold state. + /// + public void TriggerClickDown() + { + m_isHolding = true; + m_suppressClick = false; + m_holdTimer = 0f; + } + + /// + /// Called when the button is released. Determines whether to trigger hold end, shift-click, or the base click event. + /// + public void TriggerClickUp() + { + if (m_holdTimer >= HoldTriggerTime) + { + OnHold?.Invoke(); + OnHoldOrShiftClick?.Invoke(); + m_suppressClick = true; + } + else + { + if (m_suppressClick) + { + m_suppressClick = false; + return; + } + + if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && (OnShiftClick != null || OnHoldOrShiftClick != null)) + { + OnShiftClick?.Invoke(); + OnHoldOrShiftClick?.Invoke(); + } + else if (BaseMono.OnClick != null) + { + BaseMono.OnClick.Invoke(); + SoundManager.instance.PlaySound(BaseMono.ClickSound, false, 1); + } + } + + m_isHolding = false; + m_holdTimer = 0f; + } + + [HarmonyPatch] + private static class ExtendedPassiveButtonPatch + { + [HarmonyPatch(typeof(PassiveButton), nameof(PassiveButton.ReceiveClickDown))] + [HarmonyPrefix] + private static bool PassiveButton_ReceiveClickDown_Prefix(PassiveButton __instance) + { + var ext = MonoExtensionManager.Get(__instance); + if (ext != null) + { + ext.TriggerClickDown(); + return false; + } + + return true; + } + + [HarmonyPatch(typeof(PassiveButton), nameof(PassiveButton.ReceiveClickUp))] + [HarmonyPrefix] + private static bool PassiveButton_ReceiveClickUp_Prefix(PassiveButton __instance) + { + var ext = MonoExtensionManager.Get(__instance); + if (ext != null) + { + ext.TriggerClickUp(); + return false; + } + + return true; + } + } +} \ No newline at end of file diff --git a/src/Mono/ExtendedPlayerControl.cs b/src/Mono/Extended/ExtendedPlayerControl.cs similarity index 98% rename from src/Mono/ExtendedPlayerControl.cs rename to src/Mono/Extended/ExtendedPlayerControl.cs index 05ac8bd..688d969 100644 --- a/src/Mono/ExtendedPlayerControl.cs +++ b/src/Mono/Extended/ExtendedPlayerControl.cs @@ -5,7 +5,7 @@ using Il2CppInterop.Runtime.Attributes; using System.Collections; using UnityEngine; -namespace BetterAmongUs.Mono; +namespace BetterAmongUs.Mono.Extended; /// /// Extends PlayerControl with additional functionality. diff --git a/src/Mono/ExtendedPlayerInfo.cs b/src/Mono/Extended/ExtendedPlayerInfo.cs similarity index 99% rename from src/Mono/ExtendedPlayerInfo.cs rename to src/Mono/Extended/ExtendedPlayerInfo.cs index 8faf012..57b195b 100644 --- a/src/Mono/ExtendedPlayerInfo.cs +++ b/src/Mono/Extended/ExtendedPlayerInfo.cs @@ -6,7 +6,7 @@ using Il2CppInterop.Runtime.Attributes; using InnerNet; using UnityEngine; -namespace BetterAmongUs.Mono; +namespace BetterAmongUs.Mono.Extended; /// /// Extended player information with additional data and anti-cheat features. diff --git a/src/Mono/MeetingInfoDisplay.cs b/src/Mono/MeetingInfoDisplay.cs index 33205df..19b78a6 100644 --- a/src/Mono/MeetingInfoDisplay.cs +++ b/src/Mono/MeetingInfoDisplay.cs @@ -2,6 +2,7 @@ using BetterAmongUs.Data; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; +using BetterAmongUs.Mono.Extended; using Il2CppInterop.Runtime.Attributes; using System.Text; using TMPro; diff --git a/src/Mono/PlayerInfoDisplay.cs b/src/Mono/PlayerInfoDisplay.cs index 35d31d3..c9bfcb9 100644 --- a/src/Mono/PlayerInfoDisplay.cs +++ b/src/Mono/PlayerInfoDisplay.cs @@ -4,6 +4,7 @@ using BetterAmongUs.Data; using BetterAmongUs.Data.Config; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using HarmonyLib; using Il2CppInterop.Runtime.Attributes; diff --git a/src/Network/RPC.cs b/src/Network/RPC.cs index 0cb920e..dbcef62 100644 --- a/src/Network/RPC.cs +++ b/src/Network/RPC.cs @@ -2,7 +2,7 @@ using BetterAmongUs.Enums; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using Hazel; namespace BetterAmongUs.Network; diff --git a/src/Patches/Client/OptionsMenuBehaviourPatch.cs b/src/Patches/Client/OptionsMenuBehaviourPatch.cs index c41cc2b..1c2a700 100644 --- a/src/Patches/Client/OptionsMenuBehaviourPatch.cs +++ b/src/Patches/Client/OptionsMenuBehaviourPatch.cs @@ -4,7 +4,7 @@ using BetterAmongUs.Data.Config; using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI; using BetterAmongUs.Patches.Gameplay.UI.Chat; using HarmonyLib; diff --git a/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs b/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs index 10aec80..13d4a8d 100644 --- a/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs +++ b/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs @@ -3,7 +3,7 @@ using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using HarmonyLib; using InnerNet; diff --git a/src/Patches/Gameplay/LobbyPatch.cs b/src/Patches/Gameplay/LobbyPatch.cs index 24a6d77..9d87ebb 100644 --- a/src/Patches/Gameplay/LobbyPatch.cs +++ b/src/Patches/Gameplay/LobbyPatch.cs @@ -3,6 +3,7 @@ using BetterAmongUs.Helpers; using BetterAmongUs.Modules; using BetterAmongUs.Modules.OptionItems; using BetterAmongUs.Modules.Support; +using BetterAmongUs.Mono.Extended; using HarmonyLib; using UnityEngine; @@ -69,17 +70,27 @@ internal static class LobbyPatch { lobbyTimer = 600f; // Reset timer + var extendedPassiveButton = __instance.StartButton.gameObject.AddComponent(); + extendedPassiveButton.OnHoldOrShiftClick += () => + { + if (__instance.startState == GameStartManager.StartingStates.NotStarting) + { + __instance.startState = GameStartManager.StartingStates.Countdown; + __instance.FinallyBegin(); + } + }; + // Apply UI colors to buttons - __instance.StartButton?.gameObject?.SetUIColors("Icon"); - __instance.EditButton?.gameObject?.SetUIColors("Icon"); - __instance.ClientViewButton?.gameObject?.SetUIColors("Icon"); - __instance.HostViewButton?.gameObject?.SetUIColors("Icon"); + __instance.StartButton.gameObject.SetUIColors("Icon"); + __instance.EditButton.gameObject.SetUIColors("Icon"); + __instance.ClientViewButton.gameObject.SetUIColors("Icon"); + __instance.HostViewButton.gameObject.SetUIColors("Icon"); // Move start buttons to host panel if ping tracker not disabled if (!BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_BetterPingTracker)) { - __instance.StartButton?.transform?.SetParent(__instance.HostInfoPanel?.transform); - __instance.StartButtonClient?.transform?.SetParent(__instance.HostInfoPanel?.transform); + __instance.StartButton.transform.SetParent(__instance.HostInfoPanel?.transform); + __instance.StartButtonClient.transform.SetParent(__instance.HostInfoPanel?.transform); } } @@ -114,7 +125,7 @@ internal static class LobbyPatch __instance.GameStartTextParent.SetActive(false); __instance.StartButton.gameObject.SetActive(true); - if (__instance.startState == global::GameStartManager.StartingStates.Countdown) + if (__instance.startState == GameStartManager.StartingStates.Countdown) { // Show cancel button with countdown __instance.StartButton.buttonText.text = string.Format("{0}: {1}", Translator.GetString(StringNames.Cancel), (int)__instance.countDownTimer + 1); @@ -133,21 +144,13 @@ internal static class LobbyPatch if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CancelStartingGame)) return true; // If countdown is active, clicking cancels the start - if (__instance.startState == global::GameStartManager.StartingStates.Countdown) + if (__instance.startState == GameStartManager.StartingStates.Countdown) { SoundManager.instance.StopSound(__instance.gameStartSound); __instance.ResetStartState(); return false; } - // Shift+click starts game immediately (bypasses countdown) - if (Input.GetKey(KeyCode.LeftShift)) - { - __instance.startState = global::GameStartManager.StartingStates.Countdown; - __instance.FinallyBegin(); - return false; - } - return true; } diff --git a/src/Patches/Gameplay/Managers/RoleManagerPatch.cs b/src/Patches/Gameplay/Managers/RoleManagerPatch.cs index 67e48a4..893a7a6 100644 --- a/src/Patches/Gameplay/Managers/RoleManagerPatch.cs +++ b/src/Patches/Gameplay/Managers/RoleManagerPatch.cs @@ -2,7 +2,7 @@ using BetterAmongUs.Helpers; using BetterAmongUs.Modules; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Settings; using HarmonyLib; using Hazel; diff --git a/src/Patches/Gameplay/Player/PlayerControlPatch.cs b/src/Patches/Gameplay/Player/PlayerControlPatch.cs index 77456f8..72e717e 100644 --- a/src/Patches/Gameplay/Player/PlayerControlPatch.cs +++ b/src/Patches/Gameplay/Player/PlayerControlPatch.cs @@ -4,7 +4,7 @@ using BetterAmongUs.Data.Config; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; using BetterAmongUs.Modules.OptionItems; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using HarmonyLib; using System.Collections; using UnityEngine; diff --git a/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs b/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs index 97abcec..b263297 100644 --- a/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs +++ b/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs @@ -2,7 +2,7 @@ using BetterAmongUs.Data; using BetterAmongUs.Data.Config; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI; using BetterAmongUs.Patches.Gameplay.UI.Settings; using HarmonyLib; diff --git a/src/Patches/Gameplay/RolePatch.cs b/src/Patches/Gameplay/RolePatch.cs index bf56404..0362d8b 100644 --- a/src/Patches/Gameplay/RolePatch.cs +++ b/src/Patches/Gameplay/RolePatch.cs @@ -1,4 +1,4 @@ -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using HarmonyLib; namespace BetterAmongUs.Patches.Gameplay; diff --git a/src/Patches/Gameplay/UI/Chat/ChatPatch.cs b/src/Patches/Gameplay/UI/Chat/ChatPatch.cs index 8eddf56..dd73d23 100644 --- a/src/Patches/Gameplay/UI/Chat/ChatPatch.cs +++ b/src/Patches/Gameplay/UI/Chat/ChatPatch.cs @@ -3,7 +3,7 @@ using BetterAmongUs.Data; using BetterAmongUs.Data.Config; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using HarmonyLib; using System.Text; using TMPro; diff --git a/src/Patches/Gameplay/UI/GameSummaryPatch.cs b/src/Patches/Gameplay/UI/GameSummaryPatch.cs index e47f4d9..08489f7 100644 --- a/src/Patches/Gameplay/UI/GameSummaryPatch.cs +++ b/src/Patches/Gameplay/UI/GameSummaryPatch.cs @@ -1,7 +1,7 @@ using BetterAmongUs.Helpers; using BetterAmongUs.Modules; using BetterAmongUs.Modules.Support; -using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using HarmonyLib; using System.Text; using TMPro; diff --git a/src/Patches/Gameplay/UI/MeetingHudPatch.cs b/src/Patches/Gameplay/UI/MeetingHudPatch.cs index 0c9d09f..56a6b7f 100644 --- a/src/Patches/Gameplay/UI/MeetingHudPatch.cs +++ b/src/Patches/Gameplay/UI/MeetingHudPatch.cs @@ -2,6 +2,7 @@ using BetterAmongUs.Data.Config; using BetterAmongUs.Helpers; using BetterAmongUs.Modules; using BetterAmongUs.Mono; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Gameplay.UI.Chat; using HarmonyLib; using TMPro; diff --git a/src/Patches/Gameplay/UI/PlayerTabPatch.cs b/src/Patches/Gameplay/UI/PlayerTabPatch.cs index ce5acdc..44f967e 100644 --- a/src/Patches/Gameplay/UI/PlayerTabPatch.cs +++ b/src/Patches/Gameplay/UI/PlayerTabPatch.cs @@ -3,6 +3,7 @@ using BetterAmongUs.Data; using BetterAmongUs.Data.Config; using BetterAmongUs.Data.Json; using BetterAmongUs.Helpers; +using BetterAmongUs.Mono.Extended; using BetterAmongUs.Patches.Client.Managers; using HarmonyLib; using TMPro; @@ -110,50 +111,20 @@ internal static class PlayerTabPatch var colorChip = playerTab.ColorChips[i]; // Override click behavior - colorChip.Button.OnClick = new(); - colorChip.Button.OnClick.AddListener(() => + var extendedPassiveButton = colorChip.Button.gameObject.AddComponent(); + extendedPassiveButton.OnHoldOrShiftClick += () => { - if (ActiveInputManager.currentControlType == ActiveInputManager.InputType.Keyboard) + if (BAUConfigs.FavoriteColor.Value == index) { - // Shift+Click to toggle favorite - if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) - { - if (BAUConfigs.FavoriteColor.Value == index) - { - BAUConfigs.FavoriteColor.Value = -1; // Remove favorite - } - else - { - BAUConfigs.FavoriteColor.Value = index; // Set favorite - } - - UpdateFavorite(); - return; - } - - playerTab.ClickEquip(); + BAUConfigs.FavoriteColor.Value = -1; // Remove favorite } else { - // Click Color to toggle favorite if color is already taken - if (DataManager.Player.Customization.Color == index || !playerTab.AvailableColors.Contains(index)) - { - if (BAUConfigs.FavoriteColor.Value == index) - { - BAUConfigs.FavoriteColor.Value = -1; // Remove favorite - } - else - { - BAUConfigs.FavoriteColor.Value = index; // Set favorite - } - - UpdateFavorite(); - return; - } - - playerTab.SelectColor(index); + BAUConfigs.FavoriteColor.Value = index; // Set favorite } - }); + + UpdateFavorite(); + }; // Add favorite star indicator var checkBox = colorChip.PlayerEquippedForeground.transform.Find("CheckMark").GetComponentInChildren();