Remote gestures handlers components creation based on current settings

Methods renames
This commit is contained in:
SDraw 2024-08-18 15:47:39 +03:00
parent e5d4ea9d29
commit b38187d6ef
No known key found for this signature in database
GPG key ID: BB95B4DAB2BB8BB5
36 changed files with 308 additions and 240 deletions

View file

@ -20,15 +20,15 @@ namespace ml_prm
internal class GameEvent
{
event Action m_action;
public void AddHandler(Action p_listener) => m_action += p_listener;
public void RemoveHandler(Action p_listener) => m_action -= p_listener;
public void AddListener(Action p_listener) => m_action += p_listener;
public void RemoveListener(Action p_listener) => m_action -= p_listener;
public void Invoke() => m_action?.Invoke();
}
internal class GameEvent<T1>
{
event Action<T1> m_action;
public void AddHandler(Action<T1> p_listener) => m_action += p_listener;
public void RemoveHandler(Action<T1> p_listener) => m_action -= p_listener;
public void AddListener(Action<T1> p_listener) => m_action += p_listener;
public void RemoveListener(Action<T1> p_listener) => m_action -= p_listener;
public void Invoke(T1 p_obj) => m_action?.Invoke(p_obj);
}

View file

@ -1,6 +1,5 @@
using ABI_RC.Core.Player;
using ABI_RC.Core.Util.AssetFiltering;
using ABI_RC.Systems.GameEventSystem;
using System;
using System.Collections.Generic;
using System.Reflection;
@ -17,8 +16,7 @@ namespace ml_prm
ModUi.Init();
GameEvents.Init(HarmonyInstance);
WorldHandler.Init();
CVRGameEventSystem.Player.OnJoinEntity.AddListener(this.OnRemotePlayerCreated);
RemoteGestureManager.Init();
MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer());
MelonLoader.MelonCoroutines.Start(WaitForWhitelist());
@ -27,12 +25,11 @@ namespace ml_prm
public override void OnDeinitializeMelon()
{
WorldHandler.DeInit();
RemoteGestureManager.DeInit();
if(m_localController != null)
UnityEngine.Object.Destroy(m_localController);
m_localController = null;
CVRGameEventSystem.Player.OnJoinEntity.RemoveListener(this.OnRemotePlayerCreated);
}
System.Collections.IEnumerator WaitForLocalPlayer()
@ -55,11 +52,5 @@ namespace ml_prm
}
l_hashSet.Add(typeof(RagdollToggle));
}
void OnRemotePlayerCreated(CVRPlayerEntity p_player)
{
if((p_player != null) && (p_player.PuppetMaster != null))
p_player.PuppetMaster.gameObject.AddComponent<RemoteGestureHandler>();
}
}
}

View file

@ -11,8 +11,8 @@ namespace ml_prm
internal class UiEvent
{
event Action m_action;
public void AddHandler(Action p_listener) => m_action += p_listener;
public void RemoveHandler(Action p_listener) => m_action -= p_listener;
public void AddListener(Action p_listener) => m_action += p_listener;
public void RemoveListener(Action p_listener) => m_action -= p_listener;
public void Invoke() => m_action?.Invoke();
}
@ -87,7 +87,7 @@ namespace ml_prm
ms_hotkeyToggle = ms_category.AddToggle("Use hotkey", "Switch ragdoll mode with 'R' key", Settings.Hotkey);
ms_hotkeyToggle.ToggleTooltip = string.Format(c_ragdollKeyTooltip, Settings.HotkeyKey);
ms_hotkeyToggle.OnValueUpdated += (state) => OnToggleUpdate(UiIndex.Hotkey, state);
Settings.OnHotkeyKeyChanged.AddHandler(OnHotkeyKeyChanged);
Settings.OnHotkeyKeyChanged.AddListener(OnHotkeyKeyChanged);
ms_gravityToggle = ms_category.AddToggle("Use gravity", "Apply gravity to ragdoll", Settings.Gravity);
ms_gravityToggle.OnValueUpdated += (state) => OnToggleUpdate(UiIndex.Gravity, state);

View file

@ -81,30 +81,30 @@ namespace ml_prm
m_puppetRoot.localPosition = Vector3.zero;
m_puppetRoot.localRotation = Quaternion.identity;
Settings.OnMovementDragChanged.AddHandler(this.OnMovementDragChanged);
Settings.OnAngularDragChanged.AddHandler(this.OnAngularDragChanged);
Settings.OnGravityChanged.AddHandler(this.OnGravityChanged);
Settings.OnSlipperinessChanged.AddHandler(this.OnPhysicsMaterialChanged);
Settings.OnBouncinessChanged.AddHandler(this.OnPhysicsMaterialChanged);
Settings.OnBuoyancyChanged.AddHandler(this.OnBuoyancyChanged);
Settings.OnFallDamageChanged.AddHandler(this.OnFallDamageChanged);
Settings.OnGestureGrabChanged.AddHandler(this.OnGestureGrabChanged);
Settings.OnMovementDragChanged.AddListener(this.OnMovementDragChanged);
Settings.OnAngularDragChanged.AddListener(this.OnAngularDragChanged);
Settings.OnGravityChanged.AddListener(this.OnGravityChanged);
Settings.OnSlipperinessChanged.AddListener(this.OnPhysicsMaterialChanged);
Settings.OnBouncinessChanged.AddListener(this.OnPhysicsMaterialChanged);
Settings.OnBuoyancyChanged.AddListener(this.OnBuoyancyChanged);
Settings.OnFallDamageChanged.AddListener(this.OnFallDamageChanged);
Settings.OnGestureGrabChanged.AddListener(this.OnGestureGrabChanged);
GameEvents.OnAvatarClear.AddHandler(this.OnAvatarClear);
GameEvents.OnAvatarSetup.AddHandler(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.AddHandler(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.AddHandler(this.OnAvatarPostReuse);
GameEvents.OnIKScaling.AddHandler(this.OnAvatarScaling);
GameEvents.OnSeatPreSit.AddHandler(this.OnSeatPreSit);
GameEvents.OnCalibrationStart.AddHandler(this.OnCalibrationStart);
GameEvents.OnWorldPreSpawn.AddHandler(this.OnWorldPreSpawn);
GameEvents.OnCombatPreDown.AddHandler(this.OnCombatPreDown);
GameEvents.OnFlightChange.AddHandler(this.OnFlightChange);
GameEvents.OnIKOffsetUpdate.AddHandler(this.OnIKOffsetUpdate);
GameEvents.OnAvatarClear.AddListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.AddListener(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.AddListener(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.AddListener(this.OnAvatarPostReuse);
GameEvents.OnIKScaling.AddListener(this.OnAvatarScaling);
GameEvents.OnSeatPreSit.AddListener(this.OnSeatPreSit);
GameEvents.OnCalibrationStart.AddListener(this.OnCalibrationStart);
GameEvents.OnWorldPreSpawn.AddListener(this.OnWorldPreSpawn);
GameEvents.OnCombatPreDown.AddListener(this.OnCombatPreDown);
GameEvents.OnFlightChange.AddListener(this.OnFlightChange);
GameEvents.OnIKOffsetUpdate.AddListener(this.OnIKOffsetUpdate);
BetterBetterCharacterController.OnTeleport.AddListener(this.OnPlayerTeleport);
ModUi.OnSwitchChanged.AddHandler(this.SwitchRagdoll);
RemoteGestureHandler.OnGestureState.AddHandler(this.OnRemotePlayerGestureStateChanged);
ModUi.OnSwitchChanged.AddListener(this.SwitchRagdoll);
RemoteGestureHandler.OnGestureState.AddListener(this.OnRemotePlayerGestureStateChanged);
}
void OnDestroy()
@ -130,30 +130,30 @@ namespace ml_prm
Object.Destroy(m_physicsMaterial);
m_physicsMaterial = null;
Settings.OnMovementDragChanged.RemoveHandler(this.OnMovementDragChanged);
Settings.OnAngularDragChanged.RemoveHandler(this.OnAngularDragChanged);
Settings.OnGravityChanged.RemoveHandler(this.OnGravityChanged);
Settings.OnSlipperinessChanged.RemoveHandler(this.OnPhysicsMaterialChanged);
Settings.OnBouncinessChanged.RemoveHandler(this.OnPhysicsMaterialChanged);
Settings.OnBuoyancyChanged.RemoveHandler(this.OnBuoyancyChanged);
Settings.OnFallDamageChanged.RemoveHandler(this.OnFallDamageChanged);
Settings.OnGestureGrabChanged.RemoveHandler(this.OnGestureGrabChanged);
Settings.OnMovementDragChanged.RemoveListener(this.OnMovementDragChanged);
Settings.OnAngularDragChanged.RemoveListener(this.OnAngularDragChanged);
Settings.OnGravityChanged.RemoveListener(this.OnGravityChanged);
Settings.OnSlipperinessChanged.RemoveListener(this.OnPhysicsMaterialChanged);
Settings.OnBouncinessChanged.RemoveListener(this.OnPhysicsMaterialChanged);
Settings.OnBuoyancyChanged.RemoveListener(this.OnBuoyancyChanged);
Settings.OnFallDamageChanged.RemoveListener(this.OnFallDamageChanged);
Settings.OnGestureGrabChanged.RemoveListener(this.OnGestureGrabChanged);
GameEvents.OnAvatarClear.RemoveHandler(this.OnAvatarClear);
GameEvents.OnAvatarSetup.RemoveHandler(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.RemoveHandler(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.RemoveHandler(this.OnAvatarPostReuse);
GameEvents.OnIKScaling.RemoveHandler(this.OnAvatarScaling);
GameEvents.OnSeatPreSit.RemoveHandler(this.OnSeatPreSit);
GameEvents.OnCalibrationStart.RemoveHandler(this.OnCalibrationStart);
GameEvents.OnWorldPreSpawn.RemoveHandler(this.OnWorldPreSpawn);
GameEvents.OnCombatPreDown.RemoveHandler(this.OnCombatPreDown);
GameEvents.OnFlightChange.RemoveHandler(this.OnFlightChange);
GameEvents.OnIKOffsetUpdate.RemoveHandler(this.OnIKOffsetUpdate);
GameEvents.OnAvatarClear.RemoveListener(this.OnAvatarClear);
GameEvents.OnAvatarSetup.RemoveListener(this.OnAvatarSetup);
GameEvents.OnAvatarPreReuse.RemoveListener(this.OnAvatarPreReuse);
GameEvents.OnAvatarPostReuse.RemoveListener(this.OnAvatarPostReuse);
GameEvents.OnIKScaling.RemoveListener(this.OnAvatarScaling);
GameEvents.OnSeatPreSit.RemoveListener(this.OnSeatPreSit);
GameEvents.OnCalibrationStart.RemoveListener(this.OnCalibrationStart);
GameEvents.OnWorldPreSpawn.RemoveListener(this.OnWorldPreSpawn);
GameEvents.OnCombatPreDown.RemoveListener(this.OnCombatPreDown);
GameEvents.OnFlightChange.RemoveListener(this.OnFlightChange);
GameEvents.OnIKOffsetUpdate.RemoveListener(this.OnIKOffsetUpdate);
BetterBetterCharacterController.OnTeleport.RemoveListener(this.OnPlayerTeleport);
ModUi.OnSwitchChanged.RemoveHandler(this.SwitchRagdoll);
RemoteGestureHandler.OnGestureState.RemoveHandler(this.OnRemotePlayerGestureStateChanged);
ModUi.OnSwitchChanged.RemoveListener(this.SwitchRagdoll);
RemoteGestureHandler.OnGestureState.RemoveListener(this.OnRemotePlayerGestureStateChanged);
}
void Update()

View file

@ -1,8 +1,6 @@
using ABI_RC.Core.Networking.IO.Social;
using ABI_RC.Core.Player;
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
namespace ml_prm
@ -12,8 +10,8 @@ namespace ml_prm
internal class GestureEvent<T1, T2, T3>
{
event Action<T1, T2, T3> m_action;
public void AddHandler(Action<T1, T2, T3> p_listener) => m_action += p_listener;
public void RemoveHandler(Action<T1, T2, T3> p_listener) => m_action -= p_listener;
public void AddListener(Action<T1, T2, T3> p_listener) => m_action += p_listener;
public void RemoveListener(Action<T1, T2, T3> p_listener) => m_action -= p_listener;
public void Invoke(T1 p_objA, T2 p_objB, T3 p_objC) => m_action?.Invoke(p_objA, p_objB, p_objC);
}

View file

@ -0,0 +1,79 @@
using ABI_RC.Core.Player;
using ABI_RC.Systems.GameEventSystem;
using System;
using System.Collections.Generic;
namespace ml_prm
{
static class RemoteGestureManager
{
static readonly Dictionary<CVRPlayerEntity, RemoteGestureHandler> ms_remoteHandlers = new Dictionary<CVRPlayerEntity, RemoteGestureHandler>();
internal static void Init()
{
CVRGameEventSystem.Player.OnJoinEntity.AddListener(OnRemotePlayerCreated);
CVRGameEventSystem.Player.OnLeaveEntity.AddListener(OnRemotePlayerDestroyed);
Settings.OnGestureGrabChanged.AddListener(OnGestureGrabChanged);
}
internal static void DeInit()
{
CVRGameEventSystem.Player.OnJoinEntity.RemoveListener(OnRemotePlayerCreated);
CVRGameEventSystem.Player.OnLeaveEntity.RemoveListener(OnRemotePlayerDestroyed);
Settings.OnGestureGrabChanged.RemoveListener(OnGestureGrabChanged);
}
static void OnRemotePlayerCreated(CVRPlayerEntity p_player)
{
try
{
if(Settings.GestureGrab && (p_player != null) && (p_player.PuppetMaster != null))
{
RemoteGestureHandler l_handler = p_player.PuppetMaster.gameObject.AddComponent<RemoteGestureHandler>();
ms_remoteHandlers.Add(p_player, l_handler);
}
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnRemotePlayerDestroyed(CVRPlayerEntity p_player)
{
try
{
if(p_player != null)
ms_remoteHandlers.Remove(p_player);
}
catch(Exception e)
{
MelonLoader.MelonLogger.Error(e);
}
}
static void OnGestureGrabChanged(bool p_state)
{
if(p_state)
{
foreach(var l_player in CVRPlayerManager.Instance.NetworkPlayers)
{
if(!ms_remoteHandlers.ContainsKey(l_player) && (l_player.PuppetMaster != null))
{
RemoteGestureHandler l_handler = l_player.PuppetMaster.gameObject.AddComponent<RemoteGestureHandler>();
ms_remoteHandlers.Add(l_player, l_handler);
}
}
}
else
{
foreach(var l_pair in ms_remoteHandlers)
{
if(l_pair.Value != null)
UnityEngine.Object.Destroy(l_pair.Value);
}
ms_remoteHandlers.Clear();
}
}
}
}

View file

@ -9,8 +9,8 @@ namespace ml_prm
internal class SettingEvent<T>
{
event Action<T> m_action;
public void AddHandler(Action<T> p_listener) => m_action += p_listener;
public void RemoveHandler(Action<T> p_listener) => m_action -= p_listener;
public void AddListener(Action<T> p_listener) => m_action += p_listener;
public void RemoveListener(Action<T> p_listener) => m_action -= p_listener;
public void Invoke(T p_value) => m_action?.Invoke(p_value);
}