Additional nightly fixes

This commit is contained in:
SDraw 2025-06-25 01:13:40 +03:00
parent 40b683d33c
commit 5261203833
No known key found for this signature in database
GPG key ID: BB95B4DAB2BB8BB5
16 changed files with 570 additions and 750 deletions

View file

@ -15,8 +15,6 @@ namespace ml_amt
public void Invoke() => m_action?.Invoke(); public void Invoke() => m_action?.Invoke();
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent OnAvatarReuse = new GameEvent(); public static readonly GameEvent OnAvatarReuse = new GameEvent();
public static readonly GameEvent OnPlayspaceScale = new GameEvent(); public static readonly GameEvent OnPlayspaceScale = new GameEvent();
@ -24,18 +22,6 @@ namespace ml_amt
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public), typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
null, null,
@ -54,30 +40,6 @@ namespace ml_amt
} }
} }
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception l_exception)
{
MelonLoader.MelonLogger.Error(l_exception);
}
}
static void OnAvatarReinitialize_Postfix() static void OnAvatarReinitialize_Postfix()
{ {
try try

View file

@ -1,5 +1,7 @@
using ABI_RC.Core.Player; using ABI.CCK.Components;
using ABI_RC.Core.Player;
using ABI_RC.Core.Util.AnimatorManager; using ABI_RC.Core.Util.AnimatorManager;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.IK.SubSystems; using ABI_RC.Systems.IK.SubSystems;
using ABI_RC.Systems.Movement; using ABI_RC.Systems.Movement;
using RootMotion.FinalIK; using RootMotion.FinalIK;
@ -59,8 +61,8 @@ namespace ml_amt
Settings.OnProneLimitChanged.AddListener(this.OnProneLimitChanged); Settings.OnProneLimitChanged.AddListener(this.OnProneLimitChanged);
Settings.OnMassCenterChanged.AddListener(this.OnMassCenterChanged); Settings.OnMassCenterChanged.AddListener(this.OnMassCenterChanged);
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse);
GameEvents.OnPlayspaceScale.AddListener(this.OnPlayspaceScale); GameEvents.OnPlayspaceScale.AddListener(this.OnPlayspaceScale);
} }
@ -78,8 +80,8 @@ namespace ml_amt
Settings.OnProneLimitChanged.RemoveListener(this.OnProneLimitChanged); Settings.OnProneLimitChanged.RemoveListener(this.OnProneLimitChanged);
Settings.OnMassCenterChanged.RemoveListener(this.OnMassCenterChanged); Settings.OnMassCenterChanged.RemoveListener(this.OnMassCenterChanged);
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse);
GameEvents.OnPlayspaceScale.RemoveListener(this.OnPlayspaceScale); GameEvents.OnPlayspaceScale.RemoveListener(this.OnPlayspaceScale);
} }
@ -96,7 +98,9 @@ namespace ml_amt
} }
// Game events // Game events
void OnAvatarClear() void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
m_vrIk = null; m_vrIk = null;
m_avatarReady = false; m_avatarReady = false;
@ -109,8 +113,15 @@ namespace ml_amt
BetterBetterCharacterController.Instance.avatarCrouchLimit = Mathf.Clamp01(Settings.CrouchLimit); BetterBetterCharacterController.Instance.avatarCrouchLimit = Mathf.Clamp01(Settings.CrouchLimit);
BetterBetterCharacterController.Instance.avatarProneLimit = Mathf.Clamp01(Settings.ProneLimit); BetterBetterCharacterController.Instance.avatarProneLimit = Mathf.Clamp01(Settings.ProneLimit);
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarSetup() void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
Utils.SetAvatarTPose(); Utils.SetAvatarTPose();
@ -159,6 +170,11 @@ namespace ml_amt
m_avatarReady = true; m_avatarReady = true;
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnPlayspaceScale() void OnPlayspaceScale()
{ {

View file

@ -1,5 +1,7 @@
using ABI_RC.Core.Player; using ABI.CCK.Components;
using ABI_RC.Core.Player;
using ABI_RC.Core.Savior; using ABI_RC.Core.Savior;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.IK; using ABI_RC.Systems.IK;
using ABI_RC.Systems.InputManagement; using ABI_RC.Systems.InputManagement;
using System.Collections.Generic; using System.Collections.Generic;
@ -92,8 +94,8 @@ namespace ml_bft
m_pose = new HumanPose(); m_pose = new HumanPose();
m_lastValues = new float[40]; m_lastValues = new float[40];
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse);
GameEvents.OnIKSystemLateUpdate.AddListener(this.OnIKSystemLateUpdate); GameEvents.OnIKSystemLateUpdate.AddListener(this.OnIKSystemLateUpdate);
} }
@ -106,13 +108,15 @@ namespace ml_bft
m_rightFingerOffsets.Clear(); m_rightFingerOffsets.Clear();
m_ready = false; m_ready = false;
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse);
GameEvents.OnIKSystemLateUpdate.RemoveListener(this.OnIKSystemLateUpdate); GameEvents.OnIKSystemLateUpdate.RemoveListener(this.OnIKSystemLateUpdate);
} }
internal void OnAvatarSetup() internal void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
Animator l_animator = PlayerSetup.Instance.Animator; Animator l_animator = PlayerSetup.Instance.Animator;
if(l_animator.isHuman) if(l_animator.isHuman)
@ -182,8 +186,15 @@ namespace ml_bft
m_ready = ((m_leftFingerOffsets.Count > 0) || (m_rightFingerOffsets.Count > 0)); m_ready = ((m_leftFingerOffsets.Count > 0) || (m_rightFingerOffsets.Count > 0));
} }
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
internal void OnAvatarClear() internal void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
m_ready = false; m_ready = false;
m_pose = new HumanPose(); m_pose = new HumanPose();
@ -194,11 +205,16 @@ namespace ml_bft
m_leftFingerOffsets.Clear(); m_leftFingerOffsets.Clear();
m_rightFingerOffsets.Clear(); m_rightFingerOffsets.Clear();
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
internal void OnAvatarReuse() internal void OnAvatarReuse()
{ {
OnAvatarClear(); OnAvatarClear(PlayerSetup.Instance.AvatarDescriptor);
OnAvatarSetup(); OnAvatarSetup(PlayerSetup.Instance.AvatarDescriptor);
} }
internal void OnIKSystemLateUpdate(HumanPoseHandler p_handler, Transform p_hips) internal void OnIKSystemLateUpdate(HumanPoseHandler p_handler, Transform p_hips)

View file

@ -24,8 +24,6 @@ namespace ml_bft
public void Invoke(T1 p_objA, T2 p_objB) => m_action?.Invoke(p_objA, p_objB); public void Invoke(T1 p_objA, T2 p_objB) => m_action?.Invoke(p_objA, p_objB);
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent OnAvatarReuse = new GameEvent(); public static readonly GameEvent OnAvatarReuse = new GameEvent();
public static readonly GameEvent OnInputUpdate = new GameEvent(); public static readonly GameEvent OnInputUpdate = new GameEvent();
public static readonly GameEvent<HumanPoseHandler, Transform> OnIKSystemLateUpdate = new GameEvent<HumanPoseHandler, Transform>(); public static readonly GameEvent<HumanPoseHandler, Transform> OnIKSystemLateUpdate = new GameEvent<HumanPoseHandler, Transform>();
@ -34,18 +32,6 @@ namespace ml_bft
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public), typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
null, null,
@ -70,30 +56,6 @@ namespace ml_bft
} }
} }
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception l_exception)
{
MelonLoader.MelonLogger.Error(l_exception);
}
}
static void OnAvatarReinitialize_Postfix() static void OnAvatarReinitialize_Postfix()
{ {
try try

View file

@ -35,8 +35,6 @@ namespace ml_dht
public void Invoke(T1 p_objA, T2 p_objB) => m_action?.Invoke(p_objA, p_objB); public void Invoke(T1 p_objA, T2 p_objB) => m_action?.Invoke(p_objA, p_objB);
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent OnAvatarReuse = new GameEvent(); public static readonly GameEvent OnAvatarReuse = new GameEvent();
public static readonly GameEvent<EyeMovementController> OnEyeControllerUpdate = new GameEvent<EyeMovementController>(); public static readonly GameEvent<EyeMovementController> OnEyeControllerUpdate = new GameEvent<EyeMovementController>();
public static readonly GameEvent<CVRFaceTracking, EventResult> OnFaceTrackingUpdate = new GameEvent<CVRFaceTracking, EventResult>(); public static readonly GameEvent<CVRFaceTracking, EventResult> OnFaceTrackingUpdate = new GameEvent<CVRFaceTracking, EventResult>();
@ -47,18 +45,6 @@ namespace ml_dht
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public), typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
null, null,
@ -92,30 +78,6 @@ namespace ml_dht
} }
} }
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnAvatarReinitialize_Postfix() static void OnAvatarReinitialize_Postfix()
{ {
try try

View file

@ -2,6 +2,7 @@
using ABI_RC.Core.Player; using ABI_RC.Core.Player;
using ABI_RC.Core.Player.EyeMovement; using ABI_RC.Core.Player.EyeMovement;
using ABI_RC.Systems.FaceTracking; using ABI_RC.Systems.FaceTracking;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.IK; using ABI_RC.Systems.IK;
using ABI_RC.Systems.VRModeSwitch; using ABI_RC.Systems.VRModeSwitch;
using RootMotion.FinalIK; using RootMotion.FinalIK;
@ -69,8 +70,8 @@ namespace ml_dht
Settings.OnHeadTrackingChanged.AddListener(this.OnEnabledOrHeadTrackingChanged); Settings.OnHeadTrackingChanged.AddListener(this.OnEnabledOrHeadTrackingChanged);
Settings.OnSmoothingChanged.AddListener(this.OnSmoothingChanged); Settings.OnSmoothingChanged.AddListener(this.OnSmoothingChanged);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse);
GameEvents.OnEyeControllerUpdate.AddListener(this.OnEyeControllerUpdate); GameEvents.OnEyeControllerUpdate.AddListener(this.OnEyeControllerUpdate);
GameEvents.OnFaceTrackingUpdate.AddListener(this.UpdateFaceTracking); GameEvents.OnFaceTrackingUpdate.AddListener(this.UpdateFaceTracking);
@ -89,8 +90,8 @@ namespace ml_dht
Settings.OnHeadTrackingChanged.RemoveListener(this.OnEnabledOrHeadTrackingChanged); Settings.OnHeadTrackingChanged.RemoveListener(this.OnEnabledOrHeadTrackingChanged);
Settings.OnSmoothingChanged.RemoveListener(this.OnSmoothingChanged); Settings.OnSmoothingChanged.RemoveListener(this.OnSmoothingChanged);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse);
GameEvents.OnEyeControllerUpdate.RemoveListener(this.OnEyeControllerUpdate); GameEvents.OnEyeControllerUpdate.RemoveListener(this.OnEyeControllerUpdate);
GameEvents.OnFaceTrackingUpdate.RemoveListener(this.UpdateFaceTracking); GameEvents.OnFaceTrackingUpdate.RemoveListener(this.UpdateFaceTracking);
@ -137,7 +138,9 @@ namespace ml_dht
} }
// Game events // Game events
internal void OnAvatarSetup() internal void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
m_camera = PlayerSetup.Instance.activeCam.transform; m_camera = PlayerSetup.Instance.activeCam.transform;
m_avatarDescriptor = PlayerSetup.Instance.AvatarObject.GetComponent<CVRAvatar>(); m_avatarDescriptor = PlayerSetup.Instance.AvatarObject.GetComponent<CVRAvatar>();
@ -157,7 +160,14 @@ namespace ml_dht
m_lookIK.onPostSolverUpdate.AddListener(this.OnLookIKPostUpdate); m_lookIK.onPostSolverUpdate.AddListener(this.OnLookIKPostUpdate);
} }
} }
void OnAvatarClear() catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
m_avatarDescriptor = null; m_avatarDescriptor = null;
m_lookIK = null; m_lookIK = null;
@ -165,6 +175,11 @@ namespace ml_dht
m_lastHeadRotation = Quaternion.identity; m_lastHeadRotation = Quaternion.identity;
m_bindRotation = Quaternion.identity; m_bindRotation = Quaternion.identity;
} }
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarReuse() void OnAvatarReuse()
{ {
m_camera = PlayerSetup.Instance.activeCam.transform; m_camera = PlayerSetup.Instance.activeCam.transform;

View file

@ -23,8 +23,6 @@ namespace ml_lme
public void Invoke(T1 p_obj) => m_action?.Invoke(p_obj); public void Invoke(T1 p_obj) => m_action?.Invoke(p_obj);
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent OnAvatarReuse = new GameEvent(); public static readonly GameEvent OnAvatarReuse = new GameEvent();
public static readonly GameEvent<float> OnRayScale = new GameEvent<float>(); public static readonly GameEvent<float> OnRayScale = new GameEvent<float>();
public static readonly GameEvent<float> OnPlayspaceScale = new GameEvent<float>(); public static readonly GameEvent<float> OnPlayspaceScale = new GameEvent<float>();
@ -34,18 +32,6 @@ namespace ml_lme
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public), typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
null, null,
@ -76,30 +62,6 @@ namespace ml_lme
} }
} }
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnAvatarReinitialize_Postfix() static void OnAvatarReinitialize_Postfix()
{ {
try try

View file

@ -1,4 +1,6 @@
using ABI_RC.Core.Player; using ABI.CCK.Components;
using ABI_RC.Core.Player;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.IK; using ABI_RC.Systems.IK;
using RootMotion.FinalIK; using RootMotion.FinalIK;
using System.Collections.Generic; using System.Collections.Generic;
@ -148,8 +150,8 @@ namespace ml_lme
Settings.OnFingersOnlyChanged.AddListener(this.OnEnabledOrFingersOnlyChanged); Settings.OnFingersOnlyChanged.AddListener(this.OnEnabledOrFingersOnlyChanged);
Settings.OnTrackElbowsChanged.AddListener(this.OnTrackElbowsChanged); Settings.OnTrackElbowsChanged.AddListener(this.OnTrackElbowsChanged);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse);
} }
@ -174,8 +176,8 @@ namespace ml_lme
Settings.OnFingersOnlyChanged.RemoveListener(this.OnEnabledOrFingersOnlyChanged); Settings.OnFingersOnlyChanged.RemoveListener(this.OnEnabledOrFingersOnlyChanged);
Settings.OnTrackElbowsChanged.RemoveListener(this.OnTrackElbowsChanged); Settings.OnTrackElbowsChanged.RemoveListener(this.OnTrackElbowsChanged);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse);
} }
@ -255,7 +257,9 @@ namespace ml_lme
} }
// Game events // Game events
void OnAvatarClear() void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
m_vrIK = null; m_vrIK = null;
m_hips = null; m_hips = null;
@ -278,8 +282,15 @@ namespace ml_lme
m_leftFingerOffsets.Clear(); m_leftFingerOffsets.Clear();
m_rightFingerOffsets.Clear(); m_rightFingerOffsets.Clear();
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarSetup() void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
Animator l_animator = PlayerSetup.Instance.Animator; Animator l_animator = PlayerSetup.Instance.Animator;
if(l_animator.isHuman) if(l_animator.isHuman)
@ -309,6 +320,11 @@ namespace ml_lme
SetupArmIK(); SetupArmIK();
} }
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarReuse() void OnAvatarReuse()
{ {

View file

@ -1,6 +1,7 @@
using ABI.CCK.Components; using ABI.CCK.Components;
using ABI_RC.Core.InteractionSystem; using ABI_RC.Core.InteractionSystem;
using ABI_RC.Core.Player; using ABI_RC.Core.Player;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.VRModeSwitch; using ABI_RC.Systems.VRModeSwitch;
using RootMotion.FinalIK; using RootMotion.FinalIK;
using System.Collections; using System.Collections;
@ -100,8 +101,8 @@ namespace ml_pam
Settings.OnLeadingHandChanged.AddListener(this.OnLeadingHandChanged); Settings.OnLeadingHandChanged.AddListener(this.OnLeadingHandChanged);
Settings.OnHandsExtensionChanged.AddListener(this.OnHandsExtensionChanged); Settings.OnHandsExtensionChanged.AddListener(this.OnHandsExtensionChanged);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.AddListener(this.OnAvatarReuse);
GameEvents.OnIKScaling.AddListener(this.OnIKScaling); GameEvents.OnIKScaling.AddListener(this.OnIKScaling);
GameEvents.OnPickupGrab.AddListener(this.OnPickupGrab); GameEvents.OnPickupGrab.AddListener(this.OnPickupGrab);
@ -149,10 +150,10 @@ namespace ml_pam
Settings.OnLeadingHandChanged.RemoveListener(this.OnLeadingHandChanged); Settings.OnLeadingHandChanged.RemoveListener(this.OnLeadingHandChanged);
Settings.OnHandsExtensionChanged.RemoveListener(this.OnHandsExtensionChanged); Settings.OnHandsExtensionChanged.RemoveListener(this.OnHandsExtensionChanged);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse); GameEvents.OnAvatarReuse.RemoveListener(this.OnAvatarReuse);
GameEvents.OnIKScaling.AddListener(this.OnIKScaling); GameEvents.OnIKScaling.RemoveListener(this.OnIKScaling);
GameEvents.OnPickupGrab.RemoveListener(this.OnPickupGrab); GameEvents.OnPickupGrab.RemoveListener(this.OnPickupGrab);
GameEvents.OnPickupDrop.RemoveListener(this.OnPickupDrop); GameEvents.OnPickupDrop.RemoveListener(this.OnPickupDrop);
@ -341,7 +342,9 @@ namespace ml_pam
} }
// Game events // Game events
void OnAvatarClear() void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
m_vrIK = null; m_vrIK = null;
m_armIKLeft = null; m_armIKLeft = null;
@ -350,8 +353,15 @@ namespace ml_pam
m_leftHandParameter = null; m_leftHandParameter = null;
m_rightHandParameter = null; m_rightHandParameter = null;
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarSetup() void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
m_camera = PlayerSetup.Instance.activeCam.transform; m_camera = PlayerSetup.Instance.activeCam.transform;
@ -402,6 +412,11 @@ namespace ml_pam
OnGrabOffsetChanged(Settings.GrabOffset); OnGrabOffsetChanged(Settings.GrabOffset);
OnIKScaling(1f); // Reset scaling, game doesn't do this anymore on avatar switch OnIKScaling(1f); // Reset scaling, game doesn't do this anymore on avatar switch
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarReuse() void OnAvatarReuse()
{ {

View file

@ -31,8 +31,6 @@ namespace ml_pam
public void Invoke(T1 p_objA, T2 p_objB) => m_action?.Invoke(p_objA, p_objB); public void Invoke(T1 p_objA, T2 p_objB) => m_action?.Invoke(p_objA, p_objB);
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent OnAvatarReuse = new GameEvent(); public static readonly GameEvent OnAvatarReuse = new GameEvent();
public static readonly GameEvent<float> OnIKScaling = new GameEvent<float>(); public static readonly GameEvent<float> OnIKScaling = new GameEvent<float>();
public static readonly GameEvent<CVRPickupObject, Vector3> OnPickupGrab = new GameEvent<CVRPickupObject, Vector3>(); public static readonly GameEvent<CVRPickupObject, Vector3> OnPickupGrab = new GameEvent<CVRPickupObject, Vector3>();
@ -42,18 +40,6 @@ namespace ml_pam
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public), typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
null, null,
@ -84,30 +70,6 @@ namespace ml_pam
} }
} }
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnAvatarReinitialize_Postfix() static void OnAvatarReinitialize_Postfix()
{ {
try try

View file

@ -15,8 +15,6 @@ namespace ml_pmc
public void Invoke() => m_action?.Invoke(); public void Invoke() => m_action?.Invoke();
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent OnAvatarPreReuse = new GameEvent(); public static readonly GameEvent OnAvatarPreReuse = new GameEvent();
public static readonly GameEvent OnAvatarPostReuse = new GameEvent(); public static readonly GameEvent OnAvatarPostReuse = new GameEvent();
@ -24,18 +22,6 @@ namespace ml_pmc
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public), typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarReinitialize_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarReinitialize_Prefix), BindingFlags.Static | BindingFlags.NonPublic)),
@ -48,30 +34,6 @@ namespace ml_pmc
} }
} }
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnAvatarReinitialize_Prefix() static void OnAvatarReinitialize_Prefix()
{ {
try try

View file

@ -1,5 +1,7 @@
using ABI_RC.Core.Networking.IO.Social; using ABI.CCK.Components;
using ABI_RC.Core.Networking.IO.Social;
using ABI_RC.Core.Player; using ABI_RC.Core.Player;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.IK; using ABI_RC.Systems.IK;
using ABI_RC.Systems.IK.SubSystems; using ABI_RC.Systems.IK.SubSystems;
using ABI_RC.Systems.InputManagement; using ABI_RC.Systems.InputManagement;
@ -55,8 +57,8 @@ namespace ml_pmc
void Start() void Start()
{ {
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.AddListener(this.OnAvatarPreReuse); GameEvents.OnAvatarPreReuse.AddListener(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.AddListener(this.OnAvatarPostReuse); GameEvents.OnAvatarPostReuse.AddListener(this.OnAvatarPostReuse);
@ -78,8 +80,8 @@ namespace ml_pmc
m_vrIk = null; m_vrIk = null;
m_lookAtIk = null; m_lookAtIk = null;
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.RemoveListener(this.OnAvatarPreReuse); GameEvents.OnAvatarPreReuse.RemoveListener(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.RemoveListener(this.OnAvatarPostReuse); GameEvents.OnAvatarPostReuse.RemoveListener(this.OnAvatarPostReuse);
@ -229,7 +231,9 @@ namespace ml_pmc
} }
// Game events // Game events
void OnAvatarClear() void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
if(m_active) if(m_active)
{ {
@ -254,8 +258,15 @@ namespace ml_pmc
m_fingerTracking = false; m_fingerTracking = false;
m_pose = new HumanPose(); m_pose = new HumanPose();
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarSetup() void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
m_inVr = Utils.IsInVR(); m_inVr = Utils.IsInVR();
m_animator = PlayerSetup.Instance.Animator; m_animator = PlayerSetup.Instance.Animator;
@ -282,6 +293,11 @@ namespace ml_pmc
else else
m_animator = null; m_animator = null;
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarPreReuse() void OnAvatarPreReuse()
{ {

View file

@ -23,8 +23,6 @@ namespace ml_ppu
public void Invoke(T1 p_obj) => m_action?.Invoke(p_obj); public void Invoke(T1 p_obj) => m_action?.Invoke(p_obj);
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent<float> OnIKScaling = new GameEvent<float>(); public static readonly GameEvent<float> OnIKScaling = new GameEvent<float>();
public static readonly GameEvent OnWorldPreSpawn = new GameEvent(); public static readonly GameEvent OnWorldPreSpawn = new GameEvent();
public static readonly GameEvent<CVRSeat> OnSeatPreSit = new GameEvent<CVRSeat>(); public static readonly GameEvent<CVRSeat> OnSeatPreSit = new GameEvent<CVRSeat>();
@ -33,18 +31,6 @@ namespace ml_ppu
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static |BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(PlayerSetup).GetMethod("SetupIKScaling", BindingFlags.Instance | BindingFlags.NonPublic), typeof(PlayerSetup).GetMethod("SetupIKScaling", BindingFlags.Instance | BindingFlags.NonPublic),
null, null,
@ -69,30 +55,6 @@ namespace ml_ppu
} }
} }
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupIKScaling_Postfix(ref UnityEngine.Vector3 ___scaleDifference) static void OnSetupIKScaling_Postfix(ref UnityEngine.Vector3 ___scaleDifference)
{ {
try try

View file

@ -2,6 +2,7 @@
using ABI_RC.Core; using ABI_RC.Core;
using ABI_RC.Core.InteractionSystem; using ABI_RC.Core.InteractionSystem;
using ABI_RC.Core.Player; using ABI_RC.Core.Player;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.IK; using ABI_RC.Systems.IK;
using ABI_RC.Systems.Movement; using ABI_RC.Systems.Movement;
using UnityEngine; using UnityEngine;
@ -46,8 +47,8 @@ namespace ml_ppu
void Start() void Start()
{ {
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnIKScaling.AddListener(this.OnIKScaling); GameEvents.OnIKScaling.AddListener(this.OnIKScaling);
GameEvents.OnWorldPreSpawn.AddListener(this.OnWorldPreSpawn); GameEvents.OnWorldPreSpawn.AddListener(this.OnWorldPreSpawn);
GameEvents.OnSeatPreSit.AddListener(this.OnSeatPreSit); GameEvents.OnSeatPreSit.AddListener(this.OnSeatPreSit);
@ -60,8 +61,8 @@ namespace ml_ppu
if(Instance == this) if(Instance == this)
Instance = null; Instance = null;
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnIKScaling.RemoveListener(this.OnIKScaling); GameEvents.OnIKScaling.RemoveListener(this.OnIKScaling);
GameEvents.OnWorldPreSpawn.RemoveListener(this.OnWorldPreSpawn); GameEvents.OnWorldPreSpawn.RemoveListener(this.OnWorldPreSpawn);
GameEvents.OnSeatPreSit.RemoveListener(this.OnSeatPreSit); GameEvents.OnSeatPreSit.RemoveListener(this.OnSeatPreSit);
@ -126,7 +127,9 @@ namespace ml_ppu
} }
} }
void OnAvatarSetup() void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
Animator l_animator = PlayerSetup.Instance.Animator; Animator l_animator = PlayerSetup.Instance.Animator;
if((l_animator != null) && l_animator.isHuman) if((l_animator != null) && l_animator.isHuman)
@ -158,8 +161,15 @@ namespace ml_ppu
} }
} }
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarClear() void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
m_ready = false; m_ready = false;
m_held = false; m_held = false;
@ -174,6 +184,11 @@ namespace ml_ppu
m_holderPointB = null; m_holderPointB = null;
m_holderPointerB = null; m_holderPointerB = null;
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnIKScaling(float p_scale) void OnIKScaling(float p_scale)
{ {

View file

@ -32,8 +32,6 @@ namespace ml_prm
public void Invoke(T1 p_obj) => m_action?.Invoke(p_obj); public void Invoke(T1 p_obj) => m_action?.Invoke(p_obj);
} }
public static readonly GameEvent OnAvatarSetup = new GameEvent();
public static readonly GameEvent OnAvatarClear = new GameEvent();
public static readonly GameEvent OnAvatarPreReuse = new GameEvent(); public static readonly GameEvent OnAvatarPreReuse = new GameEvent();
public static readonly GameEvent OnAvatarPostReuse = new GameEvent(); public static readonly GameEvent OnAvatarPostReuse = new GameEvent();
public static readonly GameEvent<float> OnIKScaling = new GameEvent<float>(); public static readonly GameEvent<float> OnIKScaling = new GameEvent<float>();
@ -50,18 +48,6 @@ namespace ml_prm
{ {
try try
{ {
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static |BindingFlags.NonPublic))
);
p_instance.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar), BindingFlags.Instance | BindingFlags.Public),
null,
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
);
p_instance.Patch( p_instance.Patch(
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public), typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarReinitialize_Prefix), BindingFlags.Static | BindingFlags.NonPublic)), new HarmonyLib.HarmonyMethod(typeof(GameEvents).GetMethod(nameof(OnAvatarReinitialize_Prefix), BindingFlags.Static | BindingFlags.NonPublic)),
@ -115,30 +101,6 @@ namespace ml_prm
} }
} }
static void OnAvatarClear_Postfix()
{
try
{
OnAvatarClear.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnSetupAvatar_Postfix()
{
try
{
OnAvatarSetup.Invoke();
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnAvatarReinitialize_Prefix() static void OnAvatarReinitialize_Prefix()
{ {
try try

View file

@ -2,6 +2,7 @@
using ABI_RC.Core; using ABI_RC.Core;
using ABI_RC.Core.InteractionSystem; using ABI_RC.Core.InteractionSystem;
using ABI_RC.Core.Player; using ABI_RC.Core.Player;
using ABI_RC.Systems.GameEventSystem;
using ABI_RC.Systems.IK; using ABI_RC.Systems.IK;
using ABI_RC.Systems.IK.SubSystems; using ABI_RC.Systems.IK.SubSystems;
using ABI_RC.Systems.InputManagement; using ABI_RC.Systems.InputManagement;
@ -99,8 +100,8 @@ namespace ml_prm
Settings.OnFallDamageChanged.AddListener(this.OnFallDamageChanged); Settings.OnFallDamageChanged.AddListener(this.OnFallDamageChanged);
Settings.OnGestureGrabChanged.AddListener(this.OnGestureGrabChanged); Settings.OnGestureGrabChanged.AddListener(this.OnGestureGrabChanged);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.AddListener(this.OnAvatarPreReuse); GameEvents.OnAvatarPreReuse.AddListener(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.AddListener(this.OnAvatarPostReuse); GameEvents.OnAvatarPostReuse.AddListener(this.OnAvatarPostReuse);
GameEvents.OnIKScaling.AddListener(this.OnAvatarScaling); GameEvents.OnIKScaling.AddListener(this.OnAvatarScaling);
@ -148,8 +149,8 @@ namespace ml_prm
Settings.OnFallDamageChanged.RemoveListener(this.OnFallDamageChanged); Settings.OnFallDamageChanged.RemoveListener(this.OnFallDamageChanged);
Settings.OnGestureGrabChanged.RemoveListener(this.OnGestureGrabChanged); Settings.OnGestureGrabChanged.RemoveListener(this.OnGestureGrabChanged);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear); CVRGameEventSystem.Avatar.OnLocalAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.RemoveListener(this.OnAvatarPreReuse); GameEvents.OnAvatarPreReuse.RemoveListener(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.RemoveListener(this.OnAvatarPostReuse); GameEvents.OnAvatarPostReuse.RemoveListener(this.OnAvatarPostReuse);
GameEvents.OnIKScaling.RemoveListener(this.OnAvatarScaling); GameEvents.OnIKScaling.RemoveListener(this.OnAvatarScaling);
@ -252,7 +253,9 @@ namespace ml_prm
} }
// Game events // Game events
void OnAvatarClear() void OnAvatarClear(CVRAvatar p_avatar)
{
try
{ {
if(m_initTask != null) if(m_initTask != null)
{ {
@ -288,8 +291,15 @@ namespace ml_prm
m_puppet.localScale = Vector3.one; m_puppet.localScale = Vector3.one;
m_inAir = false; m_inAir = false;
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
void OnAvatarSetup() void OnAvatarSetup(CVRAvatar p_avatar)
{
try
{ {
if(PlayerSetup.Instance.Animator.isHuman) if(PlayerSetup.Instance.Animator.isHuman)
{ {
@ -377,6 +387,11 @@ namespace ml_prm
m_initTask = StartCoroutine(WaitForBodyHandlers()); m_initTask = StartCoroutine(WaitForBodyHandlers());
} }
} }
catch(System.Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
IEnumerator WaitForBodyHandlers() IEnumerator WaitForBodyHandlers()
{ {