Decompiled source of FrankysDebugger v1.0.0

FrankysDebugger.dll

Decompiled 15 hours ago
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using BepInEx;
using BepInEx.Configuration;
using BepInExPlugin;
using HarmonyLib;
using UnityEngine;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Frankys Debugger (FrankysDebugger)")]
[assembly: AssemblyProduct("Frankys Debugger")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace BepInExPlugin
{
	[BepInPlugin("FrankysDebugger", "Frankys Debugger", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		public static ConfigEntry<bool> DebugValue;

		private void Awake()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			Harmony val = new Harmony("FrankysDebugger");
			val.PatchAll();
			Debug.Log((object)"FrankysDebugger loaded");
			DebugValue = ((BaseUnityPlugin)this).Config.Bind<bool>("Debugging", "Node Viewer", false, "");
		}
	}
	internal static class PluginInfo
	{
		public const string PLUGIN_NAME = "Frankys Debugger";

		public const string PLUGIN_ID = "FrankysDebugger";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace FrankysDebugger
{
	[HarmonyPatch(typeof(CarrierLayout), "Start")]
	public static class CarrierGraphDebugPatch
	{
		public class BillboardLabel : MonoBehaviour
		{
			private void LateUpdate()
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				if (!((Object)(object)Camera.main == (Object)null))
				{
					((Component)this).transform.rotation = ((Component)Camera.main).transform.rotation;
				}
			}
		}

		private static Material DebugMaterial;

		private static Material DebugLineMaterial;

		private static FieldInfo RegionFieldType = AccessTools.Field(typeof(Region), "_regionType");

		private static void Postfix(CarrierLayout __instance)
		{
			if (Plugin.DebugValue.Value)
			{
				((MonoBehaviour)__instance).StartCoroutine(DrawGraphDelayed());
			}
		}

		private static IEnumerator DrawGraphDelayed()
		{
			yield return null;
			DrawGraph();
		}

		private static void DrawGraph()
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			//IL_00bd: 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_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Expected O, but got Unknown
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Expected O, but got Unknown
			//IL_031d: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0383: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: Unknown result type (might be due to invalid IL or missing references)
			//IL_039c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0440: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0516: Unknown result type (might be due to invalid IL or missing references)
			//IL_0528: Unknown result type (might be due to invalid IL or missing references)
			//IL_058a: Unknown result type (might be due to invalid IL or missing references)
			//IL_059c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_060d: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = GameObject.Find("DEBUG_GRAPH_ROOT");
			if ((Object)(object)val != (Object)null)
			{
				Object.Destroy((Object)(object)val);
			}
			GameObject val2 = new GameObject("DEBUG_GRAPH_ROOT");
			UnitMovementNode[] array = Object.FindObjectsOfType<UnitMovementNode>();
			List<NavigationConnection> list = new List<NavigationConnection>();
			if (array == null || array.Length == 0)
			{
				Debug.LogWarning((object)"No UnitMovementNodes found for debug drawing.");
				return;
			}
			if ((Object)(object)DebugMaterial == (Object)null)
			{
				DebugMaterial = new Material(Shader.Find("Standard"));
				DebugMaterial.color = Color.green;
			}
			if ((Object)(object)DebugLineMaterial == (Object)null)
			{
				DebugLineMaterial = new Material(Shader.Find("Sprites/Default"));
				DebugLineMaterial.color = Color.green;
			}
			HashSet<string> hashSet = new HashSet<string>();
			UnitMovementNode[] array2 = array;
			foreach (UnitMovementNode val3 in array2)
			{
				GameObject val4 = GameObject.CreatePrimitive((PrimitiveType)0);
				((Object)val4).name = "DEBUG_NODE_" + ((Object)val3).name;
				val4.transform.position = ((Component)val3).transform.position;
				val4.transform.localScale = Vector3.one * 0.75f;
				Object.Destroy((Object)(object)val4.GetComponent<Collider>());
				Renderer component = val4.GetComponent<Renderer>();
				component.material = DebugMaterial;
				component.material.color = Color.green;
				val4.transform.SetParent(val2.transform);
				GameObject val5 = new GameObject("Label");
				val5.transform.SetParent(val4.transform);
				val5.transform.localPosition = Vector3.up * 1.5f;
				TextMesh val6 = val5.AddComponent<TextMesh>();
				val5.AddComponent<BillboardLabel>();
				val6.text = ((Object)val3).name;
				val6.characterSize = 0.4f;
				val6.fontSize = 32;
				val6.anchor = (TextAnchor)4;
				val6.alignment = (TextAlignment)1;
				val6.color = Color.white;
				list.Clear();
				((NavigationNode)val3).GetConnections(list);
				foreach (NavigationConnection item2 in list)
				{
					if (item2 == null)
					{
						continue;
					}
					NavigationNode targetNode = item2.TargetNode;
					if ((Object)(object)targetNode == (Object)null)
					{
						continue;
					}
					int instanceID = ((Object)val3).GetInstanceID();
					int instanceID2 = ((Object)targetNode).GetInstanceID();
					string item = ((instanceID < instanceID2) ? (instanceID + "_" + instanceID2) : (instanceID2 + "_" + instanceID));
					if (hashSet.Add(item))
					{
						GameObject val7 = new GameObject("DEBUG_LINE_" + ((Object)val3).name + "_to_" + ((Object)targetNode).name);
						val7.transform.SetParent(val2.transform);
						LineRenderer val8 = val7.AddComponent<LineRenderer>();
						((Renderer)val8).material = DebugMaterial;
						val8.startColor = Color.green;
						val8.endColor = Color.green;
						val8.startWidth = 0.1f;
						val8.endWidth = 0.1f;
						val8.alignment = (LineAlignment)0;
						val8.positionCount = 2;
						val8.useWorldSpace = true;
						((Renderer)val8).shadowCastingMode = (ShadowCastingMode)0;
						((Renderer)val8).receiveShadows = false;
						Vector3 val9 = ((Component)val3).transform.position + Vector3.up * 0.3f;
						Vector3 val10 = ((Component)targetNode).transform.position + Vector3.up * 0.3f;
						val8.SetPosition(0, val9);
						val8.SetPosition(1, val10);
						Debug.Log((object)("Line made from " + ((Object)val3).name + " to " + ((Object)targetNode).name));
						if (((Object)val3).name.Contains("Parking") || ((Object)targetNode).name.Contains("Parking"))
						{
							((Renderer)val8).material.color = Color.blue;
							((Renderer)val8).material.color = Color.blue;
							Debug.Log((object)("Set " + ((Object)val7).name + " to blue"));
						}
						else if (((Object)val3).name.Contains("Catapult") || ((Object)targetNode).name.Contains("Catapult"))
						{
							((Renderer)val8).material.color = Color.red;
							((Renderer)val8).material.color = Color.red;
							Debug.Log((object)("Set " + ((Object)val7).name + " to red"));
						}
						else if (((Object)val3).name.Contains("Repair") || ((Object)targetNode).name.Contains("Repair"))
						{
							((Renderer)val8).material.color = Color.magenta;
							((Renderer)val8).material.color = Color.magenta;
							Debug.Log((object)("Set " + ((Object)val7).name + " to magenta"));
						}
						else if (((Object)val3).name.Contains("Helicopter") || ((Object)targetNode).name.Contains("Helicopter"))
						{
							((Renderer)val8).material.color = Color.yellow;
							((Renderer)val8).material.color = Color.yellow;
							Debug.Log((object)("Set " + ((Object)val7).name + " to yellow"));
						}
						else if (((Object)val3).name.Contains("Junction") || ((Object)targetNode).name.Contains("Junction"))
						{
							((Renderer)val8).material.color = Color.green;
							((Renderer)val8).material.color = Color.green;
							Debug.Log((object)("Set " + ((Object)val7).name + " to green"));
						}
					}
				}
			}
			Debug.Log((object)$"Graph debug complete. Nodes found: {array.Length}");
		}
	}
}