diff --git a/src/Data/Config/BAUConfigs.cs b/src/Data/Config/BAUConfigs.cs index 7096c11..3e01577 100644 --- a/src/Data/Config/BAUConfigs.cs +++ b/src/Data/Config/BAUConfigs.cs @@ -63,11 +63,21 @@ internal static class BAUConfigs /// internal static BAUConfigEntry MinimapIcons { get; } = new("Better Options", "MinimapIcons", true); + /// + /// Gets the configuration entry for new minimap colors setting. + /// + internal static BAUConfigEntry BetterMinimapColors { get; } = new("Better Options", "BetterMinimapColors", true); + /// /// Gets the configuration entry for vent color groups setting. /// internal static BAUConfigEntry VentColorGroups { get; } = new("Better Options", "VentColorGroups", true); + /// + /// Gets the configuration entry for better color blind text setting. + /// + internal static BAUConfigEntry BetterColorblindText { get; } = new("Better Options", "BetterColorblindText", true); + /// /// Gets the configuration entry for compress settings file setting. /// diff --git a/src/MonoScripts/MeetingInfoDisplay.cs b/src/MonoScripts/MeetingInfoDisplay.cs index 489f86b..f4c84cb 100644 --- a/src/MonoScripts/MeetingInfoDisplay.cs +++ b/src/MonoScripts/MeetingInfoDisplay.cs @@ -1,5 +1,6 @@ using BetterAmongUs.Attributes; using BetterAmongUs.Data; +using BetterAmongUs.Data.Config; using BetterAmongUs.Generated; using BetterAmongUs.Modules.Support; using BetterAmongUs.MonoScripts.Extended; @@ -91,7 +92,14 @@ internal sealed class MeetingInfoDisplay : PlayerInfoDisplay if (!BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CustomColorBlindText)) { - _pva.ColorBlindName.transform.localPosition = new Vector3(-0.91f, -0.19f, -0.05f); + if (BAUConfigs.BetterColorblindText.Value) + { + _pva.ColorBlindName.transform.localPosition = new Vector3(-0.91f, -0.19f, -0.05f); + } + else + { + _pva.ColorBlindName.transform.localPosition = _pva.NameText.transform.localPosition - new Vector3(0f, 0.19f, 0f); + } } _lastUpdateFrame = Time.frameCount; diff --git a/src/MonoScripts/PlayerInfoDisplay.cs b/src/MonoScripts/PlayerInfoDisplay.cs index 27d7c0e..fecb1b3 100644 --- a/src/MonoScripts/PlayerInfoDisplay.cs +++ b/src/MonoScripts/PlayerInfoDisplay.cs @@ -411,12 +411,20 @@ internal class PlayerInfoDisplay : MonoBehaviour private void UpdateColorBlindTextPosition() { if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CustomColorBlindText)) + { return; + } var text = _player.cosmetics.colorBlindText; if (!text.enabled) return; + if (!BAUConfigs.BetterColorblindText.Value) + { + text.transform.localPosition = new Vector3(0f, -0.2f, 0f); + return; + } + if (!_player.onLadder && !_player.MyPhysics.Animations.IsPlayingAnyLadderAnimation()) { text.transform.localPosition = new Vector3(0f, -1.3f, 0.4999f); diff --git a/src/Patches/Client/OptionsMenuBehaviourPatch.cs b/src/Patches/Client/OptionsMenuBehaviourPatch.cs index c30e7b4..7d0c3bc 100644 --- a/src/Patches/Client/OptionsMenuBehaviourPatch.cs +++ b/src/Patches/Client/OptionsMenuBehaviourPatch.cs @@ -5,6 +5,7 @@ using BetterAmongUs.Generated; using BetterAmongUs.Managers; using BetterAmongUs.Modules; using BetterAmongUs.MonoScripts.Extended; +using BetterAmongUs.Patches.Gameplay.Player; using BetterAmongUs.Patches.Gameplay.UI; using BetterAmongUs.Patches.Gameplay.UI.Chat; using BetterAmongUs.Utilities; @@ -55,8 +56,10 @@ internal static class OptionsMenuBehaviourPatch ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_UnlockFPS, BAUConfigs.UnlockFPS, 1, __instance, UpdateFrameRate); ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_ShowFPS, BAUConfigs.ShowFPS, 1, __instance); - ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_VentColorGroups, BAUConfigs.VentColorGroups, 2, __instance, MiniMapBehaviourPatch.ClearMapIcons); - ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_MinimapIcons, BAUConfigs.MinimapIcons, 2, __instance, MiniMapBehaviourPatch.ClearMapIcons); + ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_MinimapIcons, BAUConfigs.MinimapIcons, 2, __instance, MiniMapBehaviourPatch.ForceCloseMiniMap); + ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_BetterMinimapColors, BAUConfigs.BetterMinimapColors, 2, __instance, MiniMapBehaviourPatch.ForceCloseMiniMap); + ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_VentColorGroups, BAUConfigs.VentColorGroups, 2, __instance, MiniMapBehaviourPatch.ForceCloseMiniMap); + ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_BetterColorblindText, BAUConfigs.BetterColorblindText, 2, __instance, CosmeticsLayerPatch.UpdateAllColorblindText); ClientOptionItem.CreateToggle(TranslationStrings.BetterOption_CompressSettingFiles, BAUConfigs.CompressSettingFiles, 2, __instance, ConvertAllSettingFiles); // Button options (no toggle) diff --git a/src/Patches/Gameplay/Player/CosmeticsLayerPatch.cs b/src/Patches/Gameplay/Player/CosmeticsLayerPatch.cs index 3e2097f..de196d3 100644 --- a/src/Patches/Gameplay/Player/CosmeticsLayerPatch.cs +++ b/src/Patches/Gameplay/Player/CosmeticsLayerPatch.cs @@ -1,5 +1,6 @@ -using BetterAmongUs.Utilities; +using BetterAmongUs.Data.Config; using BetterAmongUs.Modules.Support; +using BetterAmongUs.Utilities; using HarmonyLib; namespace BetterAmongUs.Patches.Gameplay.Player; @@ -7,11 +8,27 @@ namespace BetterAmongUs.Patches.Gameplay.Player; [HarmonyPatch] internal static class CosmeticsLayerPatch { + internal static void UpdateAllColorblindText() + { + foreach (var player in PlayerControl.AllPlayerControls) + { + player.cosmetics.colorBlindText.text = player.cosmetics.GetColorBlindText(); + } + + if (MeetingHud.Instance != null) + { + foreach (var pva in MeetingHud.Instance.playerStates) + { + pva.SetColorblindText(); + } + } + } + [HarmonyPatch(typeof(CosmeticsLayer), nameof(CosmeticsLayer.GetColorBlindText))] [HarmonyPrefix] private static bool CosmeticsLayer_GetColorBlindText_Prefix(CosmeticsLayer __instance, ref string __result) { - if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CustomColorBlindText)) + if (!BAUConfigs.BetterColorblindText.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CustomColorBlindText)) { return true; } diff --git a/src/Patches/Gameplay/Player/PlayerControlPatch.cs b/src/Patches/Gameplay/Player/PlayerControlPatch.cs index 9755099..825489a 100644 --- a/src/Patches/Gameplay/Player/PlayerControlPatch.cs +++ b/src/Patches/Gameplay/Player/PlayerControlPatch.cs @@ -104,7 +104,7 @@ internal static class PlayerControlPatch if (targetPlayer == null) return; - if (!BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CustomColorBlindText)) + if (BAUConfigs.BetterColorblindText.Value && !BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CustomColorBlindText)) { if (targetPlayer.Data.PlayerId == __instance.Data.PlayerId) { diff --git a/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs b/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs index e2ea37b..f23e150 100644 --- a/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs +++ b/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs @@ -20,39 +20,68 @@ internal static class MiniMapBehaviourPatch [HarmonyPatch(typeof(MapBehaviour), nameof(MapBehaviour.ShowNormalMap))] [HarmonyPostfix] private static void MapBehaviour_ShowNormalMap_Postfix(MapBehaviour __instance) - => __instance.ColorControl.SetColor(new Color(0.05f, 0.6f, 1f, 1f)); // Blue tint for normal map + { + if (!BAUConfigs.BetterMinimapColors.Value) + { + return; + } + + __instance.ColorControl.SetColor(new Color(0.05f, 0.6f, 1f, 1f)); + } [HarmonyPatch(typeof(MapBehaviour), nameof(MapBehaviour.ShowDetectiveMap))] [HarmonyPostfix] private static void MapBehaviour_ShowDetectiveMap_Postfix(MapBehaviour __instance) - => __instance.ColorControl.SetColor(new Color(0.05f, 0.6f, 1f, 1f)); // Blue tint for detective map + { + if (!BAUConfigs.BetterMinimapColors.Value) + { + return; + } + + __instance.ColorControl.SetColor(new Color(0.05f, 0.6f, 1f, 1f)); + } [HarmonyPatch(typeof(MapBehaviour), nameof(MapBehaviour.ShowSabotageMap))] [HarmonyPostfix] private static void MapBehaviour_ShowSabotageMap_Postfix(MapBehaviour __instance) - => __instance.ColorControl.SetColor(new Color(1f, 0.3f, 0f, 1f)); // Orange tint for sabotage map + { + if (!BAUConfigs.BetterMinimapColors.Value) + { + return; + } + + __instance.ColorControl.SetColor(new Color(1f, 0.3f, 0f, 1f)); + } [HarmonyPatch(typeof(MapCountOverlay), nameof(MapCountOverlay.OnEnable))] [HarmonyPostfix] private static void MapCountOverlay_OnEnable_Postfix(MapCountOverlay __instance) - // Green background normally, gray if comms sabotaged - => __instance.BackgroundColor.SetColor(PlayerTask.PlayerHasTaskOfType(PlayerControl.LocalPlayer) ? Palette.DisabledGrey : new Color(0.2f, 0.5f, 0f, 1f)); + { + if (!BAUConfigs.BetterMinimapColors.Value) + { + return; + } + + __instance.BackgroundColor.SetColor(PlayerTask.PlayerHasTaskOfType(PlayerControl.LocalPlayer) ? Palette.DisabledGrey : new Color(0.2f, 0.5f, 0f, 1f)); + } [HarmonyPatch(typeof(MapCountOverlay), nameof(MapCountOverlay.Update))] [HarmonyPrefix] private static void MapCountOverlay_Update_Prefix(MapCountOverlay __instance) { - // Handle comms sabotage effect on map + if (!BAUConfigs.BetterMinimapColors.Value) + { + return; + } + if (PlayerTask.PlayerHasTaskOfType(PlayerControl.LocalPlayer)) { - // Comms sabotaged - disable map __instance.isSab = true; __instance.BackgroundColor.SetColor(Palette.DisabledGrey); __instance.SabotageText.gameObject.SetActive(true); } else { - // Comms working - normal map __instance.isSab = false; __instance.BackgroundColor.SetColor(new Color(0.2f, 0.5f, 0f, 1f)); __instance.SabotageText.gameObject.SetActive(false); @@ -62,14 +91,21 @@ internal static class MiniMapBehaviourPatch [HarmonyPatch(typeof(MapConsole), nameof(MapConsole.Use))] [HarmonyPostfix] private static void MapConsole_ShowCountOverlay_Postfix() - => MapBehaviour.Instance.ColorControl.SetColor(new Color(0.2f, 0.5f, 0f, 1f)); // Green tint for admin map + { + if (!BAUConfigs.BetterMinimapColors.Value) + { + return; + } + + MapBehaviour.Instance.ColorControl.SetColor(new Color(0.2f, 0.5f, 0f, 1f)); + } private static Transform? _icons; // Container for all custom map icons /// /// Clears all map icons to be regenerated /// - internal static void ClearMapIcons() + internal static void ForceCloseMiniMap() { if (_icons != null) { diff --git a/src/Resources/Lang/en_US.json b/src/Resources/Lang/en_US.json index 11dcb20..1c7c8f6 100644 --- a/src/Resources/Lang/en_US.json +++ b/src/Resources/Lang/en_US.json @@ -63,6 +63,8 @@ "BetterOption.ShowFPS": "ShowFPS", "BetterOption.VentColorGroups": "Vent Color Groups", "BetterOption.MinimapIcons": "Minimap Icons", + "BetterOption.BetterMinimapColors": "Better Minimap Colors", + "BetterOption.BetterColorblindText": "Better Colorblind Text", "BetterOption.CompressSettingFiles": "Compress Setting Files", "BetterOption.SaveData": "Open Save Data", diff --git a/src/build/Generated/TranslationStrings.cs b/src/build/Generated/TranslationStrings.cs index f53931c..43a0c8c 100644 --- a/src/build/Generated/TranslationStrings.cs +++ b/src/build/Generated/TranslationStrings.cs @@ -323,6 +323,16 @@ public static class TranslationStrings /// public static readonly TranslationString BetterOption_MinimapIcons = new("BetterOption.MinimapIcons"); + /// + /// Base Translation: Better Minimap Colors + /// + public static readonly TranslationString BetterOption_BetterMinimapColors = new("BetterOption.BetterMinimapColors"); + + /// + /// Base Translation: Better Colorblind Text + /// + public static readonly TranslationString BetterOption_BetterColorblindText = new("BetterOption.BetterColorblindText"); + /// /// Base Translation: Compress Setting Files ///