From 2254f8b27d79b29cb664290b464f573478779499 Mon Sep 17 00:00:00 2001 From: Gurge44 Date: Sat, 27 Jun 2026 14:58:00 +0200 Subject: [PATCH] some improvements --- Modules/CustomRpcSender.cs | 2 +- Modules/Utils.cs | 23 +++++++++++++++ Patches/ChatCommandPatch.cs | 4 +-- Patches/ChatControlPatch.cs | 2 +- Patches/GameOptionsMenuPatch.cs | 50 ++++++++++++++++++--------------- Patches/TextBoxPatch.cs | 2 +- SubmergedCompatibility.cs | 5 ---- 7 files changed, 56 insertions(+), 32 deletions(-) diff --git a/Modules/CustomRpcSender.cs b/Modules/CustomRpcSender.cs index 109691907..17c5d5fd6 100644 --- a/Modules/CustomRpcSender.cs +++ b/Modules/CustomRpcSender.cs @@ -978,7 +978,7 @@ static class PreventLargePacketKickPatch var serverType = GameStates.CurrentServerType; - if (serverType is GameStates.ServerType.Local or GameStates.ServerType.Vanilla || (serverType == GameStates.ServerType.Niko && msg.Length > 1400)) + if (!AmongUsClient.Instance.AmHost || serverType is GameStates.ServerType.Local or GameStates.ServerType.Vanilla || (serverType == GameStates.ServerType.Niko && msg.Length > 1400)) { Logger.Warn($" Blocked large packet from sending (size: {msg.Length})", nameof(PreventLargePacketKickPatch)); return false; diff --git a/Modules/Utils.cs b/Modules/Utils.cs index 1e099f291..01fd59ac0 100644 --- a/Modules/Utils.cs +++ b/Modules/Utils.cs @@ -4958,6 +4958,29 @@ public static class Utils float b = (color.b + weight) / (darkness + 1); return new(r, g, b, color.a); } + + /// + /// Calculates whether the text color should be black or white based on the given background color. + /// + /// + /// Color.black or Color.white, whichever has higher contrast compared to the background color. + public static Color GetTextColor(Color32 background) + { + float r = background.r / 255f; + float g = background.g / 255f; + float b = background.b / 255f; + + r = r <= 0.03928f ? r / 12.92f : Mathf.Pow((r + 0.055f) / 1.055f, 2.4f); + g = g <= 0.03928f ? g / 12.92f : Mathf.Pow((g + 0.055f) / 1.055f, 2.4f); + b = b <= 0.03928f ? b / 12.92f : Mathf.Pow((b + 0.055f) / 1.055f, 2.4f); + + float luminance = 0.2126f * r + 0.7152f * g + 0.0722f * b; + + float contrastWhite = (1.05f) / (luminance + 0.05f); + float contrastBlack = (luminance + 0.05f) / 0.05f; + + return contrastBlack > contrastWhite ? Color.black : Color.white; + } public static void SetChatVisible(this IReadOnlyList players, bool visible) { diff --git a/Patches/ChatCommandPatch.cs b/Patches/ChatCommandPatch.cs index 09e3e3795..c3542112a 100644 --- a/Patches/ChatCommandPatch.cs +++ b/Patches/ChatCommandPatch.cs @@ -3589,8 +3589,8 @@ internal static class UpdateCharCountPatch __instance.charCountText.color = length switch { - < 1000 => Color.black, - < 1200 => new(1f, 1f, 0f, 1f), + < 800 => Color.black, + < 1000 => Color.yellow, _ => Color.red }; } diff --git a/Patches/ChatControlPatch.cs b/Patches/ChatControlPatch.cs index 298e83bdd..b461b359a 100644 --- a/Patches/ChatControlPatch.cs +++ b/Patches/ChatControlPatch.cs @@ -60,7 +60,7 @@ internal static class ChatControllerUpdatePatch if (!__instance.freeChatField.textArea.hasFocus) return; - __instance.freeChatField.textArea.characterLimit = 1200; + __instance.freeChatField.textArea.characterLimit = 1000; if (Input.GetKeyDown(KeyCode.Tab)) TextBoxPatch.OnTabPress(__instance); diff --git a/Patches/GameOptionsMenuPatch.cs b/Patches/GameOptionsMenuPatch.cs index 9a0d6a1dd..333694179 100644 --- a/Patches/GameOptionsMenuPatch.cs +++ b/Patches/GameOptionsMenuPatch.cs @@ -1098,6 +1098,20 @@ public static class GameSettingMenuPatch presetTmp.fontSizeMax = presetTmp.fontSizeMin = size; + var gameSettingsLabel = __instance.GameSettingsButton.transform.parent.parent.FindChild("GameSettingsLabel").GetComponent(); + gameSettingsLabel.DestroyTranslator(); + gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n"); + gameSettingsLabel.transform.localPosition += new Vector3(0f, 0.1f, 0f); + + if (russian) + { + gameSettingsLabel.transform.localScale = new(0.7f, 0.7f, 1f); + gameSettingsLabel.transform.localPosition = new(-3.77f, 1.62f, -4); + } + + Vector3 gameSettingsLabelPos = gameSettingsLabel.transform.localPosition; + + GameObject tempMinus = GameObject.Find("MinusButton").gameObject; cached = ExtraObjectsCache.TryGetValue(1, out cache); GameObject gMinus = cached ? cache : ModGameOptionsMenu.Track(Object.Instantiate(__instance.GamePresetsButton.gameObject, preset.transform)); @@ -1127,6 +1141,7 @@ public static class GameSettingMenuPatch GameOptionsMenuPatch.RefreshSettingValues(); GameOptionsMenuPatch.RefreshTabButtons(); presetTmp.SetText(Translator.GetString($"Preset_{OptionItem.CurrentPreset + 1}")); + gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n"); Logger.Info($"Current preset: {OptionItem.CurrentPreset + 1}", "GameOptionsMenuPatch"); ChangingPreset = false; NotificationPopperPatch.AddSettingsChangeMessage(Options.Preset); @@ -1144,8 +1159,8 @@ public static class GameSettingMenuPatch selectedSprites.sprite = tempMinus.GetComponentInChildren().sprite; inactiveSprites.color = new Color32(55, 59, 60, 255); - activeSprites.color = new Color32(0, 255, 165, 255); - selectedSprites.color = new Color32(0, 165, 255, 255); + activeSprites.color = new Color32(0, 165, 255, 255); + selectedSprites.color = new Color32(0, 255, 165, 255); cached = ExtraObjectsCache.TryGetValue(2, out cache); @@ -1176,6 +1191,7 @@ public static class GameSettingMenuPatch GameOptionsMenuPatch.RefreshSettingValues(); GameOptionsMenuPatch.RefreshTabButtons(); presetTmp.SetText(Translator.GetString($"Preset_{OptionItem.CurrentPreset + 1}")); + gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n"); Logger.Info($"Current preset: {OptionItem.CurrentPreset + 1}", "GameOptionsMenuPatch"); ChangingPreset = false; NotificationPopperPatch.AddSettingsChangeMessage(Options.Preset); @@ -1187,30 +1203,16 @@ public static class GameSettingMenuPatch GameObject.Find("PlayerOptionsMenu(Clone)").transform.FindChild("What Is This?").gameObject.SetActive(false); - var gameSettingsLabel = __instance.GameSettingsButton.transform.parent.parent.FindChild("GameSettingsLabel").GetComponent(); - gameSettingsLabel.DestroyTranslator(); - gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n"); - gameSettingsLabel.transform.localPosition += new Vector3(0f, 0.1f, 0f); - - if (russian) - { - gameSettingsLabel.transform.localScale = new(0.7f, 0.7f, 1f); - gameSettingsLabel.transform.localPosition = new(-3.77f, 1.62f, -4); - } - - Vector3 gameSettingsLabelPos = gameSettingsLabel.transform.localPosition; - var gms = Main.CustomGameModeValues[..^1].ToList(); gms.Remove(CustomGameMode.TheMindGame); - + if (SubmergedCompatibility.Loaded && Main.NormalOptions.MapId == 6) - gms.RemoveAll(SubmergedCompatibility.IsNotSupported); + gms.Remove(CustomGameMode.NaturalDisasters); if (Main.LIMap) { gms.Remove(CustomGameMode.CaptureTheFlag); gms.Remove(CustomGameMode.Quiz); - gms.Remove(CustomGameMode.TheMindGame); gms.Remove(CustomGameMode.BedWars); gms.Remove(CustomGameMode.Deathrace); } @@ -1232,12 +1234,13 @@ public static class GameSettingMenuPatch gmButton.SetActive(true); } gmButton.transform.localPosition = new Vector3((((index / itemsPerCol) - ((totalCols - 1) / 2f)) * 1.4f) + 0.16f, gameSettingsLabelPos.y - 1.9f - (0.17f * (index % itemsPerCol)), -1f); - gmButton.transform.localScale = new(0.35f, 0.22f, 1f); + gmButton.transform.localScale = new(0.4f, 0.22f, 1f); + var color = Main.GameModeColors[gm]; var gmButtonTmp = gmButton.transform.Find("FontPlacer/Text_TMP").GetComponent(); gmButtonTmp.alignment = TextAlignmentOptions.Center; gmButtonTmp.DestroyTranslator(); gmButtonTmp.SetText(Translator.GetString(gm.ToString()).ToUpper()); - gmButtonTmp.color = Main.GameModeColors[gm]; + gmButtonTmp.color = color; gmButtonTmp.transform.localPosition = new(gameSettingsLabelPos.x + 3.35f, gameSettingsLabelPos.y - 1.62f, gameSettingsLabelPos.z); gmButtonTmp.transform.localScale = new(1f, 1f, 1f); @@ -1259,7 +1262,9 @@ public static class GameSettingMenuPatch GameOptionsMenuPatch.RefreshCheckMarkColors(); gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n"); })); - gmPassiveButton.activeTextColor = gmPassiveButton.inactiveTextColor = gmPassiveButton.disabledTextColor = gmPassiveButton.selectedTextColor = Main.GameModeColors[gm]; + gmPassiveButton.activeTextColor = Utils.GetTextColor(color); + gmPassiveButton.inactiveTextColor = color; + gmPassiveButton.activeSprites.GetComponent().color = color; GMButtons[gm] = gmButton; } @@ -1276,9 +1281,10 @@ public static class GameSettingMenuPatch field.gameObject.SetActive(true); } field.transform.localScale = new(0.3f, 0.59f, 1); - field.transform.localPosition = new(-0.7f, -2.5f, -5f); + field.transform.localPosition = new(-0.47f, 2.15f, -5f); field.textArea.outputText.transform.localScale = new(3.5f, 2f, 1f); field.textArea.outputText.font = plusLabel.font; + field.charCountText.enabled = false; InputField = field; diff --git a/Patches/TextBoxPatch.cs b/Patches/TextBoxPatch.cs index d244425c2..db43286ad 100644 --- a/Patches/TextBoxPatch.cs +++ b/Patches/TextBoxPatch.cs @@ -323,6 +323,6 @@ public static class TextBoxPatch public static void ModifyCharacterLimit(TextBoxTMP __instance) { if (!__instance.gameObject.HasParentInHierarchy("ChatScreenRoot/ChatScreenContainer")) return; - __instance.characterLimit = 1200; + __instance.characterLimit = 1000; } } \ No newline at end of file diff --git a/SubmergedCompatibility.cs b/SubmergedCompatibility.cs index e337d14b7..d53f0a7ed 100644 --- a/SubmergedCompatibility.cs +++ b/SubmergedCompatibility.cs @@ -259,11 +259,6 @@ public static class SubmergedCompatibility return (IList)Activator.CreateInstance(genericListType); } - public static bool IsNotSupported(CustomGameMode mode) - { - return mode is CustomGameMode.NaturalDisasters; - } - public enum SubmergedSystemTypes : byte { Research = 0x80, // 128