Decompiled source of UltraMagnet v0.0.11

UltraMagnet/UltraMagnet.dll

Decompiled 7 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using PluginConfig.API;
using PluginConfig.API.Decorators;
using PluginConfig.API.Fields;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("UltraMagnet")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UltraMagnet")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("75f6899f-9595-4ae3-95d9-6a38a5411b24")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace UltraMagnet;

[HarmonyPatch]
public static class Breakable_Patch
{
	[HarmonyPrefix]
	[HarmonyPatch(typeof(Breakable), "Start")]
	private static void patch_Start(Breakable __instance)
	{
		if (Object.op_Implicit((Object)(object)((Component)__instance).GetComponentInParent<Harpoon>()))
		{
			((Component)__instance).gameObject.SetActive(!ConfigManager.unbreakable.value);
		}
	}
}
[HarmonyPatch]
public static class Cannonball_Patch
{
	[HarmonyPrefix]
	[HarmonyPatch(typeof(Cannonball), "Start")]
	private static void patch_Start(Cannonball __instance)
	{
		if (ConfigManager.cannonballPatchPanel.value)
		{
			ComponentExtensions.GetOrAddComponent<MagnetScript>((Component)(object)__instance);
		}
	}
}
[HarmonyPatch]
public static class Coin_Patch
{
	private static MagnetScript script;

	[HarmonyPrefix]
	[HarmonyPatch(typeof(Coin), "Start")]
	private static void patch_Start(Coin __instance)
	{
		if (ConfigManager.coinPatchPanel.value)
		{
			script = ComponentExtensions.GetOrAddComponent<MagnetScript>((Component)(object)__instance);
		}
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(Coin), "Update")]
	private static void patch_Update(Coin __instance)
	{
		if (script.isOnMagnet)
		{
			((MonoBehaviour)__instance).CancelInvoke("GetDeleted");
		}
		else
		{
			((MonoBehaviour)__instance).Invoke("GetDeleted", 5f);
		}
	}
}
public static class ConfigManager
{
	public static PluginConfigurator config;

	public static FloatField radius;

	public static FloatField hz;

	public static BoolField cannonballPatchPanel;

	public static BoolField coinPatchPanel;

	public static BoolField projectilePatchPanel;

	public static BoolField grenadePatchPanel;

	public static BoolField unbreakable;

	public static void Init()
	{
		//IL_0058: 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_007d: Expected O, but got Unknown
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_009c: Expected O, but got Unknown
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Expected O, but got Unknown
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Expected O, but got Unknown
		//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Expected O, but got Unknown
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_0133: Expected O, but got Unknown
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_0160: Expected O, but got Unknown
		config = PluginConfigurator.Create("UltraMagnet", "ostia.UltraMagnet");
		string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
		string text = Path.Combine(directoryName, "icon.png");
		config.SetIconWithURL("file://" + text);
		new ConfigHeader(config.rootPanel, "Patches", 24);
		cannonballPatchPanel = new BoolField(config.rootPanel, "Cannonball", "cannonballPatchPanel", true);
		coinPatchPanel = new BoolField(config.rootPanel, "Coin", "coinPatchPanel", true);
		projectilePatchPanel = new BoolField(config.rootPanel, "Projectile", "projectilePatchPanel", true);
		grenadePatchPanel = new BoolField(config.rootPanel, "Grenade", "grenadePatchPanel", true);
		new ConfigHeader(config.rootPanel, "Magnet", 24);
		unbreakable = new BoolField(config.rootPanel, "Unbreakable", "unbreakable", true);
		radius = new FloatField(config.rootPanel, "Radius", "radius", 1000f);
		hz = new FloatField(config.rootPanel, "hz", "field.hz", 80f, 0f, 85f);
	}
}
[HarmonyPatch]
public static class Grenade_Patch
{
	[HarmonyPrefix]
	[HarmonyPatch(typeof(Grenade), "Start")]
	private static void patch_Start(Grenade __instance)
	{
		if (ConfigManager.grenadePatchPanel.value)
		{
			ComponentExtensions.GetOrAddComponent<MagnetScript>((Component)(object)__instance);
		}
	}
}
public class MagnetScript : MonoBehaviour
{
	public List<Magnet> magnets = new List<Magnet>();

	public bool isOnMagnet;

	private int magnetRotationDirection;

	private Rigidbody rb;

	public event Action<bool> onMagnet;

	private Magnet GetTargetMagnet()
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//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_0063: 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_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: 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_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: 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)
		Magnet result = null;
		float num = float.PositiveInfinity;
		for (int i = 0; i < magnets.Count; i++)
		{
			Vector3 val = ((Component)magnets[i]).transform.position - ((Component)this).transform.position;
			float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
			if (sqrMagnitude < num)
			{
				num = sqrMagnitude;
				result = magnets[i];
				Vector3 val2 = new Vector3(rb.velocity.z, rb.velocity.y, 0f - rb.velocity.x);
				Vector3 normalized = ((Vector3)(ref val2)).normalized;
				if (Vector3.Dot(val, normalized) > 0f)
				{
					magnetRotationDirection = -1;
				}
				else
				{
					magnetRotationDirection = 1;
				}
			}
		}
		return result;
	}

	private void Start()
	{
		rb = ((Component)this).GetComponent<Rigidbody>();
	}

	private void LateUpdate()
	{
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00eb: 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_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_0109: Unknown result type (might be due to invalid IL or missing references)
		if (magnets.Count > 0)
		{
			magnets.RemoveAll((Magnet magnet) => (Object)(object)magnet == (Object)null);
			if (magnets.Count != 0)
			{
				Magnet targetMagnet = GetTargetMagnet();
				if (Object.op_Implicit((Object)(object)targetMagnet))
				{
					isOnMagnet = true;
					Rigidbody obj = rb;
					Vector3 velocity = rb.velocity;
					Quaternion val = Quaternion.Euler(0f, ConfigManager.hz.value * (float)magnetRotationDirection, 0f);
					Vector3 val2 = ((Component)targetMagnet).transform.position - ((Component)this).transform.position;
					Vector3 val3 = val * ((Vector3)(ref val2)).normalized;
					val2 = rb.velocity;
					Vector3 val4 = val3 * ((Vector3)(ref val2)).magnitude;
					val2 = rb.velocity;
					obj.velocity = Vector3.RotateTowards(velocity, val4, float.PositiveInfinity, ((Vector3)(ref val2)).magnitude);
				}
			}
		}
		else
		{
			isOnMagnet = false;
		}
	}
}
[HarmonyPatch]
public static class Magnet_Patch
{
	[HarmonyPrefix]
	[HarmonyPatch(typeof(Magnet), "Start")]
	private static void patch_Start(Magnet __instance)
	{
		((Component)__instance).GetComponent<SphereCollider>().radius = ConfigManager.radius.value;
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(Magnet), "OnTriggerEnter")]
	private static void patch_OnTriggerEnter(Magnet __instance, ref Collider other)
	{
		MagnetScript magnetScript = default(MagnetScript);
		if (((Component)other).TryGetComponent<MagnetScript>(ref magnetScript) && !magnetScript.magnets.Contains(__instance))
		{
			magnetScript.magnets.Add(__instance);
		}
	}
}
[BepInPlugin("ostia.UltraMagnet", "UltraMagnet", "0.0.11")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Plugin : BaseUnityPlugin
{
	public const string PLUGIN_GUID = "ostia.UltraMagnet";

	public const string PLUGIN_NAME = "UltraMagnet";

	public const string PLUGIN_VERSION = "0.0.11";

	private static Harmony harmony = new Harmony("ostia.UltraMagnet");

	private void Awake()
	{
		ConfigManager.Init();
		harmony.PatchAll();
	}
}
[HarmonyPatch]
public static class Projectile_Patch
{
	[HarmonyPrefix]
	[HarmonyPatch(typeof(Projectile), "Start")]
	private static void patch_Start(Projectile __instance)
	{
		if (ConfigManager.projectilePatchPanel.value)
		{
			ComponentExtensions.GetOrAddComponent<MagnetScript>((Component)(object)__instance);
		}
	}
}