PRM fix for build 2026r181

This commit is contained in:
SDraw 2026-04-04 08:29:42 +03:00
parent 49987b5d72
commit e357f83227
No known key found for this signature in database
GPG key ID: BB95B4DAB2BB8BB5
9 changed files with 88 additions and 142 deletions

View file

@ -1,13 +1,11 @@
using ABI.CCK.Components;
using ABI_RC.Core.Player;
using ABI_RC.Core.Savior;
using ABI_RC.Systems.IK;
using ABI_RC.Systems.Movement;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using System.Linq;
using ABI_RC.Core.InteractionSystem;
using NAK.Contacts;
namespace ml_prm
{
@ -18,6 +16,8 @@ namespace ml_prm
static readonly FieldInfo ms_influencerTouchingVolumes = typeof(PhysicsInfluencer).GetField("_touchingVolumes", BindingFlags.Instance | BindingFlags.NonPublic);
static readonly FieldInfo ms_influencerSubmergedColliders = typeof(PhysicsInfluencer).GetField("_submergedColliders", BindingFlags.Instance | BindingFlags.NonPublic);
static readonly FieldInfo ms_lastCVRSeat = typeof(BetterBetterCharacterController).GetField("_lastCvrSeat", BindingFlags.Instance | BindingFlags.NonPublic);
static readonly FieldInfo ms_contactList = typeof(ContactManager).GetField("contactList", BindingFlags.Instance | BindingFlags.NonPublic);
static readonly FieldInfo ms_pendingRemove = typeof(ContactManager).GetField("pendingRemove", BindingFlags.Instance | BindingFlags.NonPublic);
public static void ClearFluidVolumes(this BetterBetterCharacterController p_instance) => (ms_touchingVolumes?.GetValue(p_instance) as List<FluidVolume>)?.Clear();
@ -35,6 +35,18 @@ namespace ml_prm
public static CVRSeat GetCurrentSeat(this BetterBetterCharacterController p_instance) => (ms_lastCVRSeat?.GetValue(p_instance) as CVRSeat);
public static bool IsRegistered(this ContactManager p_instance, ContactBase p_contact) => (ms_contactList?.GetValue(p_instance) as List<ContactBase>).Contains(p_contact);
public static void RestoreContact(this ContactManager p_instance, ContactBase p_contact, bool p_state)
{
if(p_instance.IsRegistered(p_contact))
(ms_pendingRemove?.GetValue(p_instance) as HashSet<int>).Remove(p_contact.ContactId);
else
p_instance.Register(p_contact);
p_instance.SetEnabled(p_contact.ContactId, p_state);
}
// Unity specific
public static void CopyGlobal(this Transform p_source, Transform p_target)
{