Decompiled source of Character Ruler Plugin v1.2.0

CharacterRuler.dll

Decompiled 3 days ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using Bounce.Unmanaged;
using CharacterRuler;
using DataModel;
using HarmonyLib;
using ModdingTales;
using RadialUI;
using Unity.Collections;
using Unity.Mathematics;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Character Ruler")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HolloFox")]
[assembly: AssemblyProduct("IDL")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4e4deb5e-97f9-4901-bf67-6748a9c1229a")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.2.0.0")]
namespace CharacterRulerPlugin
{
	[HarmonyPatch(typeof(CreatureManager), "OnOp", new Type[]
	{
		typeof(DropCreatureOp),
		typeof(MessageInfo)
	})]
	public class CreatureManagerDropCreatureOpPatche
	{
		private static void Postfix(DropCreatureOp op, MessageInfo msgInfo)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			if (LocalClient.IsInGmMode)
			{
				CharacterRuler.CharacterRulerPlugin.MoveUpdate(op.CreatureId);
			}
		}
	}
	[HarmonyPatch(typeof(CreatureManager), "OnOp", new Type[]
	{
		typeof(DropCreaturesOp),
		typeof(MessageInfo)
	})]
	public class CreatureManagerDropCreaturesOpPatche
	{
		private static void Postfix(DropCreaturesOp op, MessageInfo msgInfo)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			if (LocalClient.IsInGmMode)
			{
				CreatureGuid[] creatureIds = op.CreatureIds;
				for (int i = 0; i < creatureIds.Length; i++)
				{
					CharacterRuler.CharacterRulerPlugin.MoveUpdate(creatureIds[i]);
				}
			}
		}
	}
}
namespace CharacterRuler
{
	[BepInPlugin("org.hollofox.plugins.CharacterRulerPlugin", "Character Ruler Plugin", "1.2.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class CharacterRulerPlugin : BaseUnityPlugin
	{
		public const string PluginName = "Character Ruler Plugin";

		public const string Guid = "org.hollofox.plugins.CharacterRulerPlugin";

		public const string Version = "1.2.0.0";

		internal static DictionaryList<Ruler, List<CreatureGuid>> Rulers = new DictionaryList<Ruler, List<CreatureGuid>>();

		internal static DictionaryList<CreatureGuid, List<Ruler>> ActiveRulers = new DictionaryList<CreatureGuid, List<Ruler>>();

		private void Awake()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0034: 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_005e: Expected O, but got Unknown
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Expected O, but got Unknown
			Debug.Log((object)"Character Ruler loaded");
			ModdingUtils.AddPluginToMenuList((BaseUnityPlugin)(object)this);
			new Harmony("org.hollofox.plugins.CharacterRulerPlugin").PatchAll();
			RadialUIPlugin.AddCustomButtonAttacksSubmenu("org.hollofox.plugins.CharacterRulerPlugin.AddRuler", new ItemArgs
			{
				Title = "Measure Distance",
				Action = CreateLineRuler,
				CloseMenuOnActivate = true
			}, (Func<NGuid, NGuid, bool>)NoRulerBetween);
			RadialUIPlugin.AddCustomButtonAttacksSubmenu("org.hollofox.plugins.CharacterRulerPlugin.RemoveRuler", new ItemArgs
			{
				Title = "Remove Ruler",
				Action = RemoveLineRuler,
				CloseMenuOnActivate = true
			}, (Func<NGuid, NGuid, bool>)HasRulerBetween);
		}

		private void RemoveLineRuler(MapMenuItem arg1, object arg2)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: 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_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_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_0054: Unknown result type (might be due to invalid IL or missing references)
			_ = LocalClient.SelectedCreatureId;
			CreatureGuid[] array = default(CreatureGuid[]);
			if (LocalClient.HasLassoedCreatures)
			{
				LocalClient.TryGetLassoedCreatureIds(ref array);
			}
			else
			{
				array = (CreatureGuid[])(object)new CreatureGuid[1] { LocalClient.SelectedCreatureId };
			}
			CreatureGuid targetId = new CreatureGuid(RadialUIPlugin.GetLastRadialTargetCreature());
			CreatureGuid[] array2 = array;
			foreach (CreatureGuid val in array2)
			{
				Ruler[] array3 = ActiveRulers[val].Where((Ruler r) => ActiveRulers[targetId].Contains(r)).ToArray();
				foreach (Ruler obj in array3)
				{
					RemoveRulerTracking(obj);
					obj.Dispose();
				}
			}
		}

		private void CreateLineRuler(MapMenuItem arg1, object arg2)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: 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_004c: 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_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: 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_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: 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)
			_ = LocalClient.SelectedCreatureId;
			CreaturePerceptionManager.OnLineOfSightUpdated -= LOSUpdate;
			CreaturePerceptionManager.OnLineOfSightUpdated += LOSUpdate;
			CreatureGuid[] array = default(CreatureGuid[]);
			if (LocalClient.HasLassoedCreatures)
			{
				LocalClient.TryGetLassoedCreatureIds(ref array);
			}
			else
			{
				array = (CreatureGuid[])(object)new CreatureGuid[1] { LocalClient.SelectedCreatureId };
			}
			CreatureBoardAsset val = default(CreatureBoardAsset);
			CreaturePresenter.TryGetAsset(new CreatureGuid(RadialUIPlugin.GetLastRadialTargetCreature()), ref val);
			CreatureGuid val2 = default(CreatureGuid);
			((CreatureGuid)(ref val2))..ctor(RadialUIPlugin.GetLastRadialTargetCreature());
			CreatureGuid[] array2 = array;
			CreatureBoardAsset val4 = default(CreatureBoardAsset);
			NativeArray<float3> val5 = default(NativeArray<float3>);
			foreach (CreatureGuid val3 in array2)
			{
				CreaturePresenter.TryGetAsset(val3, ref val4);
				float3[] array3 = (float3[])(object)new float3[2] { val4.LastPlacedPosition, val.LastPlacedPosition };
				val5..ctor(array3, (Allocator)3);
				Ruler val6 = Ruler.Spawn("Rulers/PhotonRuler", 1, val5.AsReadOnly());
				val5.Dispose();
				if (ActiveRulers.ContainsKey(val3))
				{
					ActiveRulers[val3].Add(val6);
				}
				else
				{
					ActiveRulers[val3] = new List<Ruler> { val6 };
				}
				if (ActiveRulers.ContainsKey(val2))
				{
					ActiveRulers[val2].Add(val6);
				}
				else
				{
					ActiveRulers[val2] = new List<Ruler> { val6 };
				}
				Rulers[val6] = new List<CreatureGuid> { val2, val3 };
			}
		}

		internal static bool NoRulerBetween(NGuid first, NGuid second)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return !HasRulerBetween(first, second);
		}

		internal static bool HasRulerBetween(NGuid first, NGuid second)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			CreatureGuid val = default(CreatureGuid);
			((CreatureGuid)(ref val))..ctor(first);
			CreatureGuid item = default(CreatureGuid);
			((CreatureGuid)(ref item))..ctor(second);
			List<Ruler> list = default(List<Ruler>);
			if (!ActiveRulers.TryGetValue(val, ref list))
			{
				return false;
			}
			List<CreatureGuid> list2 = default(List<CreatureGuid>);
			foreach (Ruler item2 in list)
			{
				if (Rulers.TryGetValue(item2, ref list2) && list2.Contains(item))
				{
					return true;
				}
			}
			return false;
		}

		internal static void MoveUpdate(CreatureGuid id)
		{
			//IL_0005: 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)
			List<Ruler> list = default(List<Ruler>);
			if (!ActiveRulers.TryGetValue(id, ref list))
			{
				return;
			}
			Dictionary<Ruler, List<CreatureGuid>> dictionary = new Dictionary<Ruler, List<CreatureGuid>>();
			foreach (Ruler item in list)
			{
				List<CreatureGuid> value = Rulers[item];
				dictionary.Add(item, value);
			}
			UpdateRulers(id, dictionary);
		}

		internal static void LOSUpdate(CreatureGuid id, LineOfSightResult result)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: 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_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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)
			List<Ruler> list = default(List<Ruler>);
			if (LocalClient.IsInGmMode || !ActiveRulers.TryGetValue(id, ref list))
			{
				return;
			}
			HashSet<Ruler> hashSet = new HashSet<Ruler>();
			Dictionary<Ruler, List<CreatureGuid>> dictionary = new Dictionary<Ruler, List<CreatureGuid>>();
			CreatureBoardAsset val = default(CreatureBoardAsset);
			foreach (Ruler item in list)
			{
				List<CreatureGuid> list2 = Rulers[item];
				bool flag = false;
				foreach (CreatureGuid item2 in list2)
				{
					if (!(item2 == id) && (!CreaturePresenter.TryGetAsset(item2, ref val) || !result.HasLineOfSightTo(val)))
					{
						flag = true;
						break;
					}
				}
				if (flag)
				{
					hashSet.Add(item);
				}
				else
				{
					dictionary.Add(item, list2);
				}
			}
			foreach (Ruler item3 in hashSet)
			{
				RemoveRulerTracking(item3);
				item3.Dispose();
			}
			UpdateRulers(id, dictionary);
		}

		internal static void UpdateRulers(CreatureGuid id, Dictionary<Ruler, List<CreatureGuid>> rulersToUpdate)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			NativeArray<float3> val = default(NativeArray<float3>);
			List<Ruler> list = default(List<Ruler>);
			foreach (KeyValuePair<Ruler, List<CreatureGuid>> item in rulersToUpdate)
			{
				Ruler key = item.Key;
				List<CreatureGuid> value = item.Value;
				Debug.Log((object)$"Updating ruler for {id} assets moved");
				float3[] array = value.Select(delegate(CreatureGuid g)
				{
					//IL_0000: Unknown result type (might be due to invalid IL or missing references)
					//IL_000a: Unknown result type (might be due to invalid IL or missing references)
					CreatureBoardAsset val3 = default(CreatureBoardAsset);
					CreaturePresenter.TryGetAsset(g, ref val3);
					return val3.LastPlacedPosition;
				}).ToArray();
				val..ctor(array, (Allocator)3);
				Ruler val2 = Ruler.Spawn("Rulers/PhotonRuler", key.CurrentModeIndex, val.AsReadOnly());
				val.Dispose();
				RemoveRulerTracking(key);
				Rulers[val2] = value;
				foreach (CreatureGuid item2 in value)
				{
					if (!ActiveRulers.TryGetValue(item2, ref list))
					{
						list = new List<Ruler>();
						ActiveRulers[item2] = list;
					}
					list.Add(val2);
				}
				key.Dispose();
			}
		}

		private static void RemoveRulerTracking(Ruler ruler)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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_0050: Unknown result type (might be due to invalid IL or missing references)
			List<CreatureGuid> list = default(List<CreatureGuid>);
			if (!Rulers.TryGetValue(ruler, ref list))
			{
				return;
			}
			Rulers.Remove(ruler);
			List<Ruler> list2 = default(List<Ruler>);
			foreach (CreatureGuid item in list)
			{
				if (ActiveRulers.TryGetValue(item, ref list2))
				{
					list2.Remove(ruler);
					if (list2.Count == 0)
					{
						ActiveRulers.Remove(item);
					}
				}
			}
		}
	}
}
namespace CharacterRuler.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("CharacterRuler.Properties.Resources", typeof(Resources).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Resources()
		{
		}
	}
}