Decompiled source of FrankysDebugger v1.0.2

FrankysDebugger.dll

Decompiled a month 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("FrankysDebugger (FrankysDebugger)")]
[assembly: AssemblyProduct("FrankysDebugger")]
[assembly: AssemblyVersion("1.0.2.0")]
[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 GameObject debugRoot;

	private static void Postfix(CarrierLayout __instance)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Expected O, but got Unknown
		if (FrankysDebugger.DebugValue.Value)
		{
			((MonoBehaviour)__instance).StartCoroutine(DrawGraphDelayed());
			GameObject val = new GameObject("Debug_Controller");
			val.AddComponent<DebugToggler>();
		}
	}

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

	public static void ToggleGraph()
	{
		if ((Object)(object)debugRoot == (Object)null)
		{
			DrawGraph();
		}
		else
		{
			debugRoot.SetActive(!debugRoot.activeSelf);
		}
	}

	private static void DrawGraph()
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Expected O, but got Unknown
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Expected O, but got Unknown
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Expected O, but got Unknown
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Unknown result type (might be due to invalid IL or missing references)
		//IL_013e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0173: Unknown result type (might be due to invalid IL or missing references)
		//IL_019a: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Expected O, but got Unknown
		//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_021c: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0304: Expected O, but got Unknown
		//IL_0333: Unknown result type (might be due to invalid IL or missing references)
		//IL_0340: Unknown result type (might be due to invalid IL or missing references)
		//IL_0399: Unknown result type (might be due to invalid IL or missing references)
		//IL_039e: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_03bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0444: Unknown result type (might be due to invalid IL or missing references)
		//IL_0456: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_052c: Unknown result type (might be due to invalid IL or missing references)
		//IL_053e: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0611: Unknown result type (might be due to invalid IL or missing references)
		//IL_0623: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)debugRoot != (Object)null)
		{
			Object.Destroy((Object)(object)debugRoot);
		}
		debugRoot = 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.");
			Object.Destroy((Object)(object)debugRoot);
			debugRoot = null;
			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 val in array2)
		{
			GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)0);
			((Object)val2).name = "DEBUG_NODE_" + ((Object)val).name;
			val2.transform.position = ((Component)val).transform.position;
			val2.transform.localScale = Vector3.one * 0.75f;
			Object.Destroy((Object)(object)val2.GetComponent<Collider>());
			Renderer component = val2.GetComponent<Renderer>();
			component.material = DebugMaterial;
			component.material.color = Color.green;
			val2.transform.SetParent(debugRoot.transform);
			GameObject val3 = new GameObject("Label");
			val3.transform.SetParent(val2.transform);
			val3.transform.localPosition = Vector3.up * 1.5f;
			TextMesh val4 = val3.AddComponent<TextMesh>();
			val3.AddComponent<BillboardLabel>();
			val4.text = ((Object)val).name;
			val4.characterSize = 0.4f;
			val4.fontSize = 32;
			val4.anchor = (TextAnchor)4;
			val4.alignment = (TextAlignment)1;
			val4.color = Color.white;
			list.Clear();
			((NavigationNode)val).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)val).GetInstanceID();
				int instanceID2 = ((Object)targetNode).GetInstanceID();
				string item = ((instanceID < instanceID2) ? (instanceID + "_" + instanceID2) : (instanceID2 + "_" + instanceID));
				if (hashSet.Add(item))
				{
					GameObject val5 = new GameObject("DEBUG_LINE_" + ((Object)val).name + "_to_" + ((Object)targetNode).name);
					val5.transform.SetParent(debugRoot.transform);
					LineRenderer val6 = val5.AddComponent<LineRenderer>();
					((Renderer)val6).material = DebugMaterial;
					val6.startColor = Color.green;
					val6.endColor = Color.green;
					val6.startWidth = 0.1f;
					val6.endWidth = 0.1f;
					val6.alignment = (LineAlignment)0;
					val6.positionCount = 2;
					val6.useWorldSpace = true;
					((Renderer)val6).shadowCastingMode = (ShadowCastingMode)0;
					((Renderer)val6).receiveShadows = false;
					Vector3 val7 = ((Component)val).transform.position + Vector3.up * 0.3f;
					Vector3 val8 = ((Component)targetNode).transform.position + Vector3.up * 0.3f;
					val6.SetPosition(0, val7);
					val6.SetPosition(1, val8);
					Debug.Log((object)("Line made from " + ((Object)val).name + " to " + ((Object)targetNode).name));
					if (((Object)val).name.Contains("Parking") || ((Object)targetNode).name.Contains("Parking"))
					{
						((Renderer)val6).material.color = Color.blue;
						((Renderer)val6).material.color = Color.blue;
						Debug.Log((object)("Set " + ((Object)val5).name + " to blue"));
					}
					else if (((Object)val).name.Contains("Catapult") || ((Object)targetNode).name.Contains("Catapult"))
					{
						((Renderer)val6).material.color = Color.red;
						((Renderer)val6).material.color = Color.red;
						Debug.Log((object)("Set " + ((Object)val5).name + " to red"));
					}
					else if (((Object)val).name.Contains("Repair") || ((Object)targetNode).name.Contains("Repair"))
					{
						((Renderer)val6).material.color = Color.magenta;
						((Renderer)val6).material.color = Color.magenta;
						Debug.Log((object)("Set " + ((Object)val5).name + " to magenta"));
					}
					else if (((Object)val).name.Contains("Helicopter") || ((Object)targetNode).name.Contains("Helicopter"))
					{
						((Renderer)val6).material.color = Color.yellow;
						((Renderer)val6).material.color = Color.yellow;
						Debug.Log((object)("Set " + ((Object)val5).name + " to yellow"));
					}
					else if (((Object)val).name.Contains("Junction") || ((Object)targetNode).name.Contains("Junction"))
					{
						((Renderer)val6).material.color = Color.green;
						((Renderer)val6).material.color = Color.green;
						Debug.Log((object)("Set " + ((Object)val5).name + " to green"));
					}
				}
			}
		}
		Debug.Log((object)$"Graph debug complete. Nodes found: {array.Length}");
	}
}
public class DebugToggler : MonoBehaviour
{
	private void Update()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		if (Input.GetKeyDown(FrankysDebugger.ToggleKey.Value))
		{
			CarrierGraphDebugPatch.ToggleGraph();
		}
	}
}
namespace BepInExPlugin;

[BepInPlugin("FrankysDebugger", "FrankysDebugger", "1.0.2")]
public class FrankysDebugger : BaseUnityPlugin
{
	public static ConfigEntry<bool> DebugValue;

	public static ConfigEntry<KeyCode> ToggleKey;

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

	public const string PLUGIN_ID = "FrankysDebugger";

	public const string PLUGIN_VERSION = "1.0.2";
}