Files
rimworld-font-replacer/Source/FontPatches.cs
2026-04-02 17:53:00 -04:00

161 lines
4.8 KiB
C#

using HarmonyLib;
using System.Reflection;
using Verse;
using UnityEngine;
using System;
using System.Collections.Generic;
using System.Linq;
using RimWorld.Planet;
using TMPro;
namespace raptureparty.RimWorldFontReplacer
{
[HarmonyPatch]
static class Text_CurFontStyle_Patch
{
[HarmonyPatch(typeof(Text), nameof(Text.CurFontStyle), MethodType.Getter)]
public static bool Prefix(ref GUIStyle __result)
{
if (CustomGUIStyles.fontStyles == null)
{
CustomGUIStyles.Create();
}
GUIStyle guistyle;
switch (Text.Font)
{
case GameFont.Tiny:
guistyle = CustomGUIStyles.fontStyles[0];
break;
case GameFont.Small:
guistyle = CustomGUIStyles.fontStyles[1];
break;
default:
case GameFont.Medium:
guistyle = CustomGUIStyles.fontStyles[2];
break;
}
guistyle.alignment = Text.Anchor;
guistyle.wordWrap = Text.WordWrap;
__result = guistyle;
return false;
}
}
[HarmonyPatch]
static class Text_CurTextFieldStyle_Patch
{
[HarmonyPrefix]
[HarmonyPatch(typeof(Text), nameof(Text.CurTextFieldStyle), MethodType.Getter)]
static bool Prefix(ref GUIStyle __result)
{
if (CustomGUIStyles.fontStyles == null)
{
CustomGUIStyles.Create();
}
GUIStyle guistyle;
switch (Text.Font)
{
case GameFont.Tiny:
guistyle = CustomGUIStyles.textFieldStyles[0];
break;
case GameFont.Small:
guistyle = CustomGUIStyles.textFieldStyles[1];
break;
default:
case GameFont.Medium:
guistyle = CustomGUIStyles.textFieldStyles[2];
break;
}
__result = guistyle;
return false;
}
}
[HarmonyPatch]
static class Text_CurTextAreaStyle_Patch
{
[HarmonyPatch(typeof(Text), nameof(Text.CurTextAreaStyle), MethodType.Getter)]
static bool Prefix(ref GUIStyle __result)
{
if (CustomGUIStyles.fontStyles == null)
{
CustomGUIStyles.Create();
}
GUIStyle guistyle;
switch (Text.Font)
{
case GameFont.Tiny:
guistyle = CustomGUIStyles.textAreaStyles[0];
break;
case GameFont.Small:
guistyle = CustomGUIStyles.textAreaStyles[1];
break;
default:
case GameFont.Medium:
guistyle = CustomGUIStyles.textAreaStyles[2];
break;
}
__result = guistyle;
return false;
}
}
[HarmonyPatch]
static class Text_CurTextAreaReadOnlyStyle_Patch
{
[HarmonyPatch(typeof(Text), nameof(Text.CurTextAreaReadOnlyStyle), MethodType.Getter)]
static bool Prefix(ref GUIStyle __result)
{
if (CustomGUIStyles.fontStyles == null)
{
CustomGUIStyles.Create();
}
GUIStyle guistyle;
switch (Text.Font)
{
case GameFont.Tiny:
guistyle = CustomGUIStyles.textAreaReadOnlyStyles[0];
break;
case GameFont.Small:
guistyle = CustomGUIStyles.textAreaReadOnlyStyles[1];
break;
default:
case GameFont.Medium:
guistyle = CustomGUIStyles.textAreaReadOnlyStyles[2];
break;
}
__result = guistyle;
return false;
}
}
[HarmonyPatch]
static class WorldFeatureTextMesh_TextMeshLegacy_Patch
{
[HarmonyPatch(typeof(WorldFeatureTextMesh_Legacy), nameof(WorldFeatureTextMesh_Legacy.Init))]
public static void Postfix(ref TextMesh ___textMesh)
{
Log.Message("Patching TextMesh init");
___textMesh.font = FontLoader.FontMedium;
}
}
[HarmonyPatch]
static class WorldFeatureTextMesh_TextMeshPro_Patch
{
[HarmonyPatch(typeof(WorldFeatureTextMesh_TextMeshPro), nameof(WorldFeatureTextMesh_TextMeshPro.Init))]
public static void Postfix(ref TextMeshPro ___textMesh)
{
Log.Message("Patching TextMeshPro init");
TMP_FontAsset asset = TMP_FontAsset.CreateFontAsset(FontLoader.FontPlanet);
___textMesh.font = asset;
___textMesh.UpdateFontAsset();
}
}
}