using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.TextCore;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("EliteMasterEric")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Replaces the in-game font with an expanded version with support for more characters.")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("FontFixer")]
[assembly: AssemblyTitle("FontFixer")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace FontFixer
{
public static class PluginInfo
{
public const string PLUGIN_ID = "FontFixer";
public const string PLUGIN_NAME = "FontFixer";
public const string PLUGIN_VERSION = "1.0.0";
public const string PLUGIN_GUID = "com.elitemastereric.fontfixer";
}
[BepInPlugin("com.elitemastereric.fontfixer", "FontFixer", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
public const string IBM_3270_FONT_NAME = "IBM 3270";
private const string IBM_3270_TMP_PATH = "assets/_Custom/FontFix/IBM 3270.asset";
private const string IBM_3270_OTF_PATH = "assets/_Custom/FontFix/IBM 3270.otf";
private const string UNIFONT_TMP_PATH = "assets/_Custom/FontFix/Unifont.asset";
private const string UNIFONT_OTF_PATH = "assets/_Custom/FontFix/Unifont.otf";
public ManualLogSource PluginLogger;
public AssetBundle assetBundle;
private TMP_FontAsset font_IBM3270;
private TMP_FontAsset font_Unifont;
public static Plugin Instance { get; private set; }
private void Awake()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
Instance = this;
PluginLogger = ((BaseUnityPlugin)this).Logger;
Harmony val = new Harmony("com.elitemastereric.fontfixer");
val.PatchAll();
PluginLogger.LogInfo((object)"Plugin FontFixer (com.elitemastereric.fontfixer) is loaded!");
LoadAssetBundle();
ApplyFallbackFont();
}
private void LoadAssetBundle()
{
string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "fontfixer.bundle");
assetBundle = AssetBundle.LoadFromFile(text);
}
private void ApplyFallbackFont()
{
TMP_FontAsset globalFallbackFont = GetGlobalFallbackFont();
if ((Object)(object)globalFallbackFont != (Object)null)
{
TMP_Settings.fallbackFontAssets.Add(globalFallbackFont);
}
}
public TMP_FontAsset GetGlobalFallbackFont()
{
if ((Object)(object)font_Unifont != (Object)null)
{
return font_Unifont;
}
if ((Object)(object)assetBundle == (Object)null)
{
PluginLogger.LogError((object)"Could not retrieve global fallback font, asset bundle is null");
return null;
}
font_Unifont = assetBundle.LoadAsset<TMP_FontAsset>("assets/_Custom/FontFix/Unifont.asset");
if ((Object)(object)font_Unifont == (Object)null)
{
PluginLogger.LogError((object)"Could not retrieve global fallback font, font asset is null");
return null;
}
return font_Unifont;
}
public TMP_FontAsset GetFont_IBM3270()
{
if ((Object)(object)font_IBM3270 != (Object)null)
{
return font_IBM3270;
}
if ((Object)(object)assetBundle == (Object)null)
{
PluginLogger.LogError((object)"Could not retrieve IBM 3270 font, asset bundle is null");
return null;
}
font_IBM3270 = assetBundle.LoadAsset<TMP_FontAsset>("assets/_Custom/FontFix/IBM 3270.asset");
if ((Object)(object)font_IBM3270 == (Object)null)
{
PluginLogger.LogError((object)"Could not retrieve IBM 3270 font, font asset is null");
return null;
}
return font_IBM3270;
}
}
}
namespace FontFixer.Patch
{
[HarmonyPatch(typeof(TextMeshProUGUI), "Awake")]
internal class LagScanPatch
{
[HarmonyPostfix]
public static void Postfix(TextMeshProUGUI __instance)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
FaceInfo faceInfo = ((TMP_Text)__instance).font.faceInfo;
if (((FaceInfo)(ref faceInfo)).familyName == "IBM 3270")
{
Plugin.Instance.PluginLogger.LogInfo((object)("Applying custom font to " + ((Object)__instance).name + "."));
TMP_FontAsset font_IBM = Plugin.Instance.GetFont_IBM3270();
((TMP_Text)__instance).font = font_IBM;
return;
}
TMP_FontAsset globalFallbackFont = Plugin.Instance.GetGlobalFallbackFont();
Plugin.Instance.PluginLogger.LogInfo((object)("Injecting fallback font to " + ((Object)__instance).name + "."));
if (((TMP_Text)__instance).font.fallbackFontAssetTable == null)
{
((TMP_Text)__instance).font.fallbackFontAssetTable = new List<TMP_FontAsset> { globalFallbackFont };
}
else if (!((TMP_Text)__instance).font.fallbackFontAssetTable.Contains(globalFallbackFont))
{
((TMP_Text)__instance).font.fallbackFontAssetTable.Add(globalFallbackFont);
}
}
}
}