muzika-gromche/MuzikaGromche/DeathScreenManager.cs

73 lines
2.1 KiB
C#

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<TextMeshProUGUI>();
if (tmp == null)
{
return;
}
var transform = textGameObject.GetComponent<RectTransform>();
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();
}
}
}