mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 18:39:23 +00:00
Remote gestures handlers components creation based on current settings
Methods renames
This commit is contained in:
parent
e5d4ea9d29
commit
b38187d6ef
36 changed files with 308 additions and 240 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
79
ml_prm/RemoteGestureManager.cs
Normal file
79
ml_prm/RemoteGestureManager.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue