Decompiled source of Point To Interact v0.2.2

kruft.PointToInteract.dll

Decompiled 3 weeks ago
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Unity.IL2CPP;
using Bossa.Cinematika;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using UnityEngine;
using WildSkies.Service;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("kruft.PointToInteract")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+36bf30e9f97f306c045ccfc5cdee256f3f22cbdc")]
[assembly: AssemblyProduct("kruft.PointToInteract")]
[assembly: AssemblyTitle("kruft.PointToInteract")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace PointToInteract;

[BepInPlugin("org.kruft.plugins.PointToInteract", "Point To Interact", "0.2.2")]
public class PointToInteractPlugin : BasePlugin
{
	private static CameraManager _cameraManager;

	private static int[] _colliderIDs = new int[10];

	public override void Load()
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		new Harmony("kruft.PointToInteract").PatchAll(typeof(PointToInteractPlugin));
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(CharacterInteract), "UpdateInteractionDetectionList")]
	private static void InteractionListPrefix(CharacterInteract __instance, ref int resultCount)
	{
		//IL_002c: 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_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: 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_008a: Unknown result type (might be due to invalid IL or missing references)
		if (resultCount <= 1)
		{
			return;
		}
		Transform transform = ((Component)_cameraManager.Camera).gameObject.transform;
		Il2CppStructArray<RaycastHit> occlusionCheckBuffer = __instance._occlusionCheckBuffer;
		Il2CppReferenceArray<Collider> interactablesNearby = __instance._interactablesNearby;
		int num = Physics.RaycastNonAlloc(new Ray(transform.position, transform.forward), occlusionCheckBuffer, __instance._interactRadius + Vector3.Distance(transform.position, __instance._character.WorldCenterOfMass), LayerMask.op_Implicit(__instance._interactableLayerMask), (QueryTriggerInteraction)2);
		if (num <= 0)
		{
			return;
		}
		int num2 = 0;
		for (int i = 0; i < num; i++)
		{
			int[] colliderIDs = _colliderIDs;
			int num3 = i;
			RaycastHit val = ((Il2CppArrayBase<RaycastHit>)(object)occlusionCheckBuffer)[i];
			colliderIDs[num3] = ((RaycastHit)(ref val)).colliderInstanceID;
		}
		for (int j = 0; j < resultCount; j++)
		{
			if (num <= 0)
			{
				break;
			}
			Collider val2 = ((Il2CppArrayBase<Collider>)(object)interactablesNearby)[j];
			int instanceID = ((Object)val2).GetInstanceID();
			for (int k = 0; k < num; k++)
			{
				if (_colliderIDs[k] == instanceID)
				{
					((Il2CppArrayBase<Collider>)(object)interactablesNearby)[num2] = val2;
					num2++;
					_colliderIDs[k] = _colliderIDs[num - 1];
					num--;
					break;
				}
			}
		}
		if (num2 > 0)
		{
			resultCount = num2;
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(LocalPlayerService), "RegisterLocalPlayer")]
	private static void SetCameraPostfix(LocalPlayerService __instance)
	{
		_cameraManager = __instance.LocalPlayer.CameraManager;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(LocalPlayerService), "UnregisterPlayer")]
	private static void UnsetCameraPostfix(LocalPlayerService __instance)
	{
		_cameraManager = null;
	}
}