Add ExtendedPassiveButton for touch support

This commit is contained in:
D1GQ committed 2026-03-30 02:37:21 -05:00
1 parent c876c01c04
commit be0d03e9e3
35 files changed
+202 -83

No files matched your search

+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
+1 -1
View File
@@ -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;
+142
View File
@@ -0,0 +1,142 @@
using BetterAmongUs.Modules;
using HarmonyLib;
using UnityEngine;
namespace BetterAmongUs.Mono.Extended;
/// <summary>
/// Extends PassiveButton with hold and shift-click functionality.
/// </summary>
internal class ExtendedPassiveButton : MonoBehaviour, IMonoExtension<PassiveButton>
{
/// <summary>
/// Gets or sets the base PassiveButton instance.
/// </summary>
public PassiveButton? BaseMono { get; set; }
/// <summary>
/// Triggered when the button has been held down for the duration specified by <see cref="HoldTriggerTime"/>.
/// </summary>
public Action? OnHold = null;
/// <summary>
/// Triggered either when the button is held (after hold trigger time) OR when shift-clicking.
/// </summary>
public Action? OnHoldOrShiftClick = null;
/// <summary>
/// Triggered when shift-clicking the button (LeftShift + click).
/// </summary>
public Action? OnShiftClick = null;
/// <summary>
/// Time in seconds the button must be held to trigger hold events.
/// </summary>
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();
}
}
}
/// <summary>
/// Called when the button is pressed down to start tracking hold state.
/// </summary>
public void TriggerClickDown()
{
m_isHolding = true;
m_suppressClick = false;
m_holdTimer = 0f;
}
/// <summary>
/// Called when the button is released. Determines whether to trigger hold end, shift-click, or the base click event.
/// </summary>
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<ExtendedPassiveButton>(__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<ExtendedPassiveButton>(__instance);
if (ext != null)
{
ext.TriggerClickUp();
return false;
}
return true;
}
}
}
@@ -5,7 +5,7 @@ using Il2CppInterop.Runtime.Attributes;
using System.Collections;
using UnityEngine;
namespace BetterAmongUs.Mono;
namespace BetterAmongUs.Mono.Extended;
/// <summary>
/// Extends PlayerControl with additional functionality.
@@ -6,7 +6,7 @@ using Il2CppInterop.Runtime.Attributes;
using InnerNet;
using UnityEngine;
namespace BetterAmongUs.Mono;
namespace BetterAmongUs.Mono.Extended;
/// <summary>
/// Extended player information with additional data and anti-cheat features.
+1
View File
@@ -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;
+1
View File
@@ -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;
+1 -1
View File
@@ -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;
@@ -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;
@@ -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;
+19 -16
View File
@@ -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>();
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;
}
@@ -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;
@@ -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;
@@ -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;
+1 -1
View File
@@ -1,4 +1,4 @@
using BetterAmongUs.Mono;
using BetterAmongUs.Mono.Extended;
using HarmonyLib;
namespace BetterAmongUs.Patches.Gameplay;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
@@ -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;
+9 -38
View File
@@ -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>();
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<SpriteRenderer>();