Decompiled source of Alphabet Enemies v1.0.0

NumberLetterSkins.dll

Decompiled 2 months ago
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 HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.UI;

[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: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("Omniscye")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("NumberLetterSkins")]
[assembly: AssemblyTitle("NumberLetterSkins")]
[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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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 Empress.Mods.NumberLetterSkins
{
	[BepInPlugin("Omniscye.NumberLetterSkins", "Empress Number/Letter Skins", "2.1.0")]
	public sealed class CellingBootstrap : BaseUnityPlugin
	{
		internal static CellingBootstrap Instance { get; private set; }

		internal Harmony Harmony { get; private set; }

		private void Awake()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Expected O, but got Unknown
			Instance = this;
			((Component)this).transform.parent = null;
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			Harmony = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
			DynBootstrap.ApplyDynamicPatches(Harmony);
			GameObject val = new GameObject("Empress_NumberLetter_Enforcer");
			Object.DontDestroyOnLoad((Object)(object)val);
			val.AddComponent<Enforcer>();
		}

		private void OnDestroy()
		{
			try
			{
				Harmony harmony = Harmony;
				if (harmony != null)
				{
					harmony.UnpatchSelf();
				}
			}
			catch
			{
			}
		}
	}
	internal static class DynBootstrap
	{
		internal static void ApplyDynamicPatches(Harmony h)
		{
			try
			{
				PatchDynamic(h, "EnemyHealth", "Awake", null, null, AccessTools.Method(typeof(DynPatches), "EnemyHealth_Awake_Postfix", (Type[])null, (Type[])null));
				PatchDynamic(h, "Enemy", "Start", null, null, AccessTools.Method(typeof(DynPatches), "Enemy_Start_Postfix", (Type[])null, (Type[])null));
			}
			catch
			{
			}
		}

		private static void PatchDynamic(Harmony h, string typeName, string methodName, Type[] paramTypes, MethodInfo prefix, MethodInfo postfix)
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			Type type = AccessTools.TypeByName(typeName);
			if (!(type == null))
			{
				MethodInfo methodInfo = ((paramTypes == null) ? AccessTools.Method(type, methodName, (Type[])null, (Type[])null) : AccessTools.Method(type, methodName, paramTypes, (Type[])null));
				if (!(methodInfo == null))
				{
					HarmonyMethod val = ((!(prefix != null)) ? ((HarmonyMethod)null) : new HarmonyMethod(prefix));
					HarmonyMethod val2 = ((!(postfix != null)) ? ((HarmonyMethod)null) : new HarmonyMethod(postfix));
					h.Patch((MethodBase)methodInfo, val, val2, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
			}
		}
	}
	internal static class VisualSwap
	{
		internal const string TagEnemy = "Empress_EnemyLetter";

		internal static void DisableAllRenderers(Transform root)
		{
			if (!Object.op_Implicit((Object)(object)root))
			{
				return;
			}
			Renderer[] componentsInChildren = ((Component)root).GetComponentsInChildren<Renderer>(true);
			Renderer[] array = componentsInChildren;
			foreach (Renderer val in array)
			{
				if (Object.op_Implicit((Object)(object)val))
				{
					val.enabled = false;
				}
			}
		}

		internal static Bounds ComputeRenderersBounds(Transform root)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			Renderer[] array = (Object.op_Implicit((Object)(object)root) ? ((Component)root).GetComponentsInChildren<Renderer>(true) : Array.Empty<Renderer>());
			if (array.Length == 0)
			{
				return new Bounds(Object.op_Implicit((Object)(object)root) ? root.position : Vector3.zero, Vector3.one);
			}
			Bounds bounds = array[0].bounds;
			Bounds result = default(Bounds);
			((Bounds)(ref result))..ctor(((Bounds)(ref bounds)).center, Vector3.zero);
			for (int i = 0; i < array.Length; i++)
			{
				((Bounds)(ref result)).Encapsulate(array[i].bounds);
			}
			return result;
		}

		internal static Color TryGetRendererColor(Transform root, Color fallback)
		{
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				Renderer val = (Object.op_Implicit((Object)(object)root) ? ((Component)root).GetComponentInChildren<Renderer>(true) : null);
				if ((Object)(object)val != (Object)null && (Object)(object)val.sharedMaterial != (Object)null)
				{
					if (val.sharedMaterial.HasProperty("_AlbedoColor"))
					{
						return val.sharedMaterial.GetColor("_AlbedoColor");
					}
					if (val.sharedMaterial.HasProperty("_BaseColor"))
					{
						return val.sharedMaterial.GetColor("_BaseColor");
					}
					if (val.sharedMaterial.HasProperty("_Color"))
					{
						return val.sharedMaterial.GetColor("_Color");
					}
				}
			}
			catch
			{
			}
			return fallback;
		}

		internal static void FitTransformToBounds(Transform t, float targetSize)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)t))
			{
				return;
			}
			Renderer[] componentsInChildren = ((Component)t).GetComponentsInChildren<Renderer>(true);
			if (componentsInChildren.Length != 0)
			{
				Bounds bounds = componentsInChildren[0].bounds;
				Bounds val = default(Bounds);
				((Bounds)(ref val))..ctor(((Bounds)(ref bounds)).center, Vector3.zero);
				Renderer[] array = componentsInChildren;
				foreach (Renderer val2 in array)
				{
					((Bounds)(ref val)).Encapsulate(val2.bounds);
				}
				float num = Mathf.Max(((Bounds)(ref val)).size.x, Mathf.Max(((Bounds)(ref val)).size.y, ((Bounds)(ref val)).size.z));
				if (!(num < 0.0001f))
				{
					float num2 = targetSize / num;
					Vector3 val3 = (((Object)(object)t.parent != (Object)null) ? t.parent.lossyScale : Vector3.one);
					Vector3 val4 = default(Vector3);
					((Vector3)(ref val4))..ctor((val3.x != 0f) ? (num2 / val3.x) : num2, (val3.y != 0f) ? (num2 / val3.y) : num2, (val3.z != 0f) ? (num2 / val3.z) : num2);
					t.localScale = Vector3.Scale(t.localScale, val4);
				}
			}
		}

		internal static Component CreateOrUpdateWorldText(Transform parent, string id, string text, Color color, Bounds referenceBounds)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Expected O, but got Unknown
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_0283: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected O, but got Unknown
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			color.a = 1f;
			Vector3 center = ((Bounds)(ref referenceBounds)).center;
			try
			{
				TMP_FontAsset val = TMP_Settings.defaultFontAsset;
				if (!Object.op_Implicit((Object)(object)val))
				{
					TMP_FontAsset[] array = Resources.FindObjectsOfTypeAll<TMP_FontAsset>();
					if (array != null && array.Length != 0)
					{
						val = array[0];
					}
				}
				if (Object.op_Implicit((Object)(object)val))
				{
					Transform val2 = parent.Find(id);
					TextMeshPro val4;
					if ((Object)(object)val2 == (Object)null)
					{
						GameObject val3 = new GameObject(id);
						val3.transform.SetParent(parent, true);
						val4 = val3.AddComponent<TextMeshPro>();
						((TMP_Text)val4).font = val;
						((TMP_Text)val4).alignment = (TextAlignmentOptions)514;
						((TMP_Text)val4).enableWordWrapping = false;
						val3.AddComponent<BillboardYOnly>().SetActive(on: true);
						val3.layer = ((Component)parent).gameObject.layer;
					}
					else
					{
						val4 = ((Component)val2).GetComponent<TextMeshPro>() ?? ((Component)val2).gameObject.AddComponent<TextMeshPro>();
					}
					((TMP_Text)val4).text = text;
					((Graphic)val4).color = color;
					val4.transform.position = center;
					val4.transform.localScale = Vector3.one * 0.1f;
					((TMP_Text)val4).ForceMeshUpdate(false, false);
					FitTransformToBounds(val4.transform, Mathf.Max(((Bounds)(ref referenceBounds)).size.x, Mathf.Max(((Bounds)(ref referenceBounds)).size.y, ((Bounds)(ref referenceBounds)).size.z)) * 0.9f);
					MeshRenderer component = ((Component)val4).GetComponent<MeshRenderer>();
					if (Object.op_Implicit((Object)(object)component))
					{
						((Renderer)component).shadowCastingMode = (ShadowCastingMode)0;
						((Renderer)component).receiveShadows = false;
						((Renderer)component).sortingOrder = 5000;
					}
					return (Component)(object)val4;
				}
			}
			catch
			{
			}
			Transform val5 = parent.Find(id);
			TextMesh val7;
			if ((Object)(object)val5 == (Object)null)
			{
				GameObject val6 = new GameObject(id);
				val6.transform.SetParent(parent, true);
				val7 = val6.AddComponent<TextMesh>();
				val7.anchor = (TextAnchor)4;
				val7.alignment = (TextAlignment)1;
				val6.AddComponent<BillboardYOnly>().SetActive(on: true);
				val6.layer = ((Component)parent).gameObject.layer;
			}
			else
			{
				val7 = ((Component)val5).GetComponent<TextMesh>() ?? ((Component)val5).gameObject.AddComponent<TextMesh>();
			}
			val7.text = text;
			val7.color = color;
			val7.fontSize = 64;
			val7.characterSize = 1f;
			((Component)val7).transform.position = center;
			((Component)val7).transform.localScale = Vector3.one * 0.1f;
			FitTransformToBounds(((Component)val7).transform, Mathf.Max(((Bounds)(ref referenceBounds)).size.x, Mathf.Max(((Bounds)(ref referenceBounds)).size.y, ((Bounds)(ref referenceBounds)).size.z)) * 0.9f);
			MeshRenderer component2 = ((Component)val7).GetComponent<MeshRenderer>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				((Renderer)component2).shadowCastingMode = (ShadowCastingMode)0;
				((Renderer)component2).receiveShadows = false;
				((Renderer)component2).sortingOrder = 5000;
			}
			return (Component)(object)val7;
		}
	}
	internal static class PrefabLetters
	{
		private static AssetBundle _bundle;

		private static readonly Dictionary<char, GameObject> _cache = new Dictionary<char, GameObject>();

		private static readonly HashSet<char> _miss = new HashSet<char>();

		private static bool _triedLoad;

		private static void TryLoad()
		{
			if (_triedLoad)
			{
				return;
			}
			_triedLoad = true;
			try
			{
				string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
				string text = Path.Combine(directoryName ?? string.Empty, "soup");
				if (File.Exists(text))
				{
					_bundle = AssetBundle.LoadFromFile(text);
				}
			}
			catch
			{
			}
		}

		internal static GameObject GetLetterPrefab(char c)
		{
			TryLoad();
			c = char.ToUpperInvariant(c);
			if (_cache.TryGetValue(c, out GameObject value))
			{
				return value;
			}
			if (_miss.Contains(c))
			{
				return null;
			}
			if ((Object)(object)_bundle == (Object)null)
			{
				_miss.Add(c);
				return null;
			}
			try
			{
				GameObject val = _bundle.LoadAsset<GameObject>(c.ToString());
				if ((Object)(object)val != (Object)null)
				{
					_cache[c] = val;
					return val;
				}
				_miss.Add(c);
				return null;
			}
			catch
			{
				_miss.Add(c);
				return null;
			}
		}

		internal static Transform SpawnOrReplace(Transform parent, string id, GameObject prefab, Bounds refBounds, Color tint)
		{
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			Transform val = parent.Find(id);
			if (Object.op_Implicit((Object)(object)val))
			{
				return val;
			}
			if (!Object.op_Implicit((Object)(object)prefab))
			{
				return null;
			}
			GameObject val2 = Object.Instantiate<GameObject>(prefab, parent);
			((Object)val2).name = id;
			Vector3 center = ((Bounds)(ref refBounds)).center;
			val2.transform.position = center;
			val2.transform.localScale = Vector3.one;
			try
			{
				Renderer[] componentsInChildren = val2.GetComponentsInChildren<Renderer>(true);
				Renderer[] array = componentsInChildren;
				foreach (Renderer val3 in array)
				{
					Material[] materials = val3.materials;
					foreach (Material val4 in materials)
					{
						if (Object.op_Implicit((Object)(object)val4))
						{
							if (val4.HasProperty("_BaseColor"))
							{
								val4.SetColor("_BaseColor", tint);
							}
							else if (val4.HasProperty("_Color"))
							{
								val4.SetColor("_Color", tint);
							}
						}
					}
				}
			}
			catch
			{
			}
			float targetSize = Mathf.Max(((Bounds)(ref refBounds)).size.x, Mathf.Max(((Bounds)(ref refBounds)).size.y, ((Bounds)(ref refBounds)).size.z)) * 0.9f;
			VisualSwap.FitTransformToBounds(val2.transform, targetSize);
			return val2.transform;
		}
	}
	public sealed class BillboardYOnly : MonoBehaviour
	{
		private bool active;

		public void SetActive(bool on)
		{
			active = on;
		}

		private void LateUpdate()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			if (!active)
			{
				return;
			}
			Camera main = Camera.main;
			if (Object.op_Implicit((Object)(object)main))
			{
				Vector3 val = ((Component)this).transform.position - ((Component)main).transform.position;
				val.y = 0f;
				if (((Vector3)(ref val)).sqrMagnitude > 0.0001f)
				{
					((Component)this).transform.rotation = Quaternion.LookRotation(((Vector3)(ref val)).normalized, Vector3.up);
				}
			}
		}
	}
	public sealed class Enforcer : MonoBehaviour
	{
		private float timer;

		private void Update()
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			timer -= Time.unscaledDeltaTime;
			if (timer > 0f)
			{
				return;
			}
			timer = 0.75f;
			try
			{
				Type type = AccessTools.TypeByName("Enemy");
				if (type != null)
				{
					Object[] array = Object.FindObjectsOfType(type, true);
					foreach (Object val in array)
					{
						DynPatches.TryEnsureEnemy((Component)val);
					}
				}
			}
			catch
			{
			}
		}
	}
	internal static class DynPatches
	{
		private static char ResolveEnemyLetterFromContext(Component enemyOrHealth)
		{
			try
			{
				Type type = AccessTools.TypeByName("Enemy");
				Type type2 = AccessTools.TypeByName("EnemyParent");
				if (type != null && type2 != null)
				{
					Component val = enemyOrHealth.GetComponent(type);
					if (!Object.op_Implicit((Object)(object)val) && enemyOrHealth != null)
					{
						FieldInfo fieldInfo = AccessTools.Field(((object)enemyOrHealth).GetType(), "enemy");
						if (fieldInfo != null)
						{
							object? value = fieldInfo.GetValue(enemyOrHealth);
							val = (Component)((value is Component) ? value : null);
						}
					}
					if (Object.op_Implicit((Object)(object)val))
					{
						FieldInfo fieldInfo2 = AccessTools.Field(type, "EnemyParent");
						Component val2 = (Component)((fieldInfo2 != null) ? /*isinst with value type is only supported in some contexts*/: null);
						if (Object.op_Implicit((Object)(object)val2) && type2.IsAssignableFrom(((object)val2).GetType()))
						{
							FieldInfo fieldInfo3 = AccessTools.Field(type2, "enemyName");
							if (fieldInfo3 != null)
							{
								string text = (fieldInfo3.GetValue(val2) as string) ?? string.Empty;
								text = text.Trim();
								if (!string.IsNullOrEmpty(text))
								{
									return char.ToUpperInvariant(text[0]);
								}
							}
						}
					}
				}
			}
			catch
			{
			}
			try
			{
				string name = ((object)enemyOrHealth).GetType().Name;
				if (!string.IsNullOrEmpty(name))
				{
					return char.ToUpperInvariant(name[0]);
				}
			}
			catch
			{
			}
			return 'E';
		}

		public static void EnemyHealth_Awake_Postfix(object __instance)
		{
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				Component val = (Component)((__instance is Component) ? __instance : null);
				if (Object.op_Implicit((Object)(object)val))
				{
					object? obj = AccessTools.Field(__instance.GetType(), "meshParent")?.GetValue(__instance);
					Transform val2 = (Transform)((obj is Transform) ? obj : null);
					Transform root = (Object.op_Implicit((Object)(object)val2) ? val2 : val.transform);
					Bounds val3 = VisualSwap.ComputeRenderersBounds(root);
					Color val4 = VisualSwap.TryGetRendererColor(root, Color.white);
					VisualSwap.DisableAllRenderers(root);
					char c = ResolveEnemyLetterFromContext(val);
					GameObject letterPrefab = PrefabLetters.GetLetterPrefab(c);
					if (Object.op_Implicit((Object)(object)letterPrefab))
					{
						PrefabLetters.SpawnOrReplace(val.transform, "Empress_EnemyLetter", letterPrefab, val3, val4);
					}
					else
					{
						VisualSwap.CreateOrUpdateWorldText(val.transform, "Empress_EnemyLetter", c.ToString(), val4, val3);
					}
				}
			}
			catch
			{
			}
		}

		public static void Enemy_Start_Postfix(object __instance)
		{
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				Component val = (Component)((__instance is Component) ? __instance : null);
				if (!Object.op_Implicit((Object)(object)val))
				{
					return;
				}
				Type type = AccessTools.TypeByName("Enemy");
				Transform root = val.transform;
				bool flag = false;
				if (type != null)
				{
					FieldInfo fieldInfo = AccessTools.Field(type, "HasHealth");
					if (fieldInfo != null)
					{
						flag = (bool)(fieldInfo.GetValue(__instance) ?? ((object)false));
					}
					if (flag)
					{
						object? obj = AccessTools.Field(type, "Health")?.GetValue(__instance);
						Component val2 = (Component)((obj is Component) ? obj : null);
						FieldInfo fieldInfo2 = (((Object)(object)val2 != (Object)null) ? AccessTools.Field(((object)val2).GetType(), "meshParent") : null);
						Transform val3 = (Transform)((fieldInfo2 != null) ? /*isinst with value type is only supported in some contexts*/: null);
						if (Object.op_Implicit((Object)(object)val3))
						{
							root = val3;
						}
					}
				}
				Bounds val4 = VisualSwap.ComputeRenderersBounds(root);
				Color val5 = VisualSwap.TryGetRendererColor(root, Color.white);
				char c = ResolveEnemyLetterFromContext(val);
				GameObject letterPrefab = PrefabLetters.GetLetterPrefab(c);
				VisualSwap.DisableAllRenderers(root);
				if (Object.op_Implicit((Object)(object)letterPrefab))
				{
					PrefabLetters.SpawnOrReplace(val.transform, "Empress_EnemyLetter", letterPrefab, val4, val5);
				}
				else
				{
					VisualSwap.CreateOrUpdateWorldText(val.transform, "Empress_EnemyLetter", c.ToString(), val5, val4);
				}
			}
			catch
			{
			}
		}

		internal static void TryEnsureEnemy(Component inst)
		{
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				Transform val = inst.transform.Find("Empress_EnemyLetter");
				if (Object.op_Implicit((Object)(object)val))
				{
					return;
				}
				Transform root = inst.transform;
				Type type = AccessTools.TypeByName("Enemy");
				if (type != null)
				{
					FieldInfo fieldInfo = AccessTools.Field(type, "HasHealth");
					if (fieldInfo != null && (bool)(fieldInfo.GetValue(inst) ?? ((object)false)))
					{
						object? obj = AccessTools.Field(type, "Health")?.GetValue(inst);
						Component val2 = (Component)((obj is Component) ? obj : null);
						FieldInfo fieldInfo2 = (((Object)(object)val2 != (Object)null) ? AccessTools.Field(((object)val2).GetType(), "meshParent") : null);
						Transform val3 = (Transform)((fieldInfo2 != null) ? /*isinst with value type is only supported in some contexts*/: null);
						if (Object.op_Implicit((Object)(object)val3))
						{
							root = val3;
						}
					}
				}
				Bounds val4 = VisualSwap.ComputeRenderersBounds(root);
				Color val5 = VisualSwap.TryGetRendererColor(root, Color.white);
				char c = ResolveEnemyLetterFromContext(inst);
				GameObject letterPrefab = PrefabLetters.GetLetterPrefab(c);
				VisualSwap.DisableAllRenderers(root);
				if (Object.op_Implicit((Object)(object)letterPrefab))
				{
					PrefabLetters.SpawnOrReplace(inst.transform, "Empress_EnemyLetter", letterPrefab, val4, val5);
				}
				else
				{
					VisualSwap.CreateOrUpdateWorldText(inst.transform, "Empress_EnemyLetter", c.ToString(), val5, val4);
				}
			}
			catch
			{
			}
		}
	}
}