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;
}
}