using System.Collections; using HarmonyLib; using TMPro; using UnityEngine; namespace MuzikaGromche { static class DeathScreenGameOverTextManager { private const string GameOverTextVanilla = "[LIFE SUPPORT: OFFLINE]"; public const string GameOverTextModdedDefault = "[ MUZIKA: GROMCHE ]"; public static void Clear() { SetTextImpl(GameOverTextVanilla); } public static void SetText(string? text) { SetTextImpl(text ?? GameOverTextModdedDefault); } public static IEnumerator SetTextAndClear(string? text) { SetText(text); // Game Over animation duration is about 4.25 seconds yield return new WaitForSeconds(5f); Clear(); } private static void SetTextImpl(string text) { GameObject textGameObject = GameObject.Find("Systems/UI/Canvas/DeathScreen/GameOverText"); if (textGameObject == null) { return; } TextMeshProUGUI tmp = textGameObject.GetComponent(); if (tmp == null) { return; } var transform = textGameObject.GetComponent(); if (transform == null) { return; } // Default transform width is 645.8 which only fit the default message and no extra characters Vector2 size = transform.sizeDelta; if (Mathf.Approximately(size.x, 645.8f)) { size.x += 100f; transform.sizeDelta = size; } tmp.text = text; } } [HarmonyPatch(typeof(RoundManager))] static class DeathScreenGameOverTextResetPatch { [HarmonyPatch(nameof(RoundManager.DespawnPropsAtEndOfRound))] [HarmonyPatch(nameof(RoundManager.OnDestroy))] [HarmonyPrefix] static void OnDestroy(RoundManager __instance) { var _ = __instance; DeathScreenGameOverTextManager.Clear(); } } }