mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 10:29:22 +00:00
159 lines
7.5 KiB
C#
159 lines
7.5 KiB
C#
using ABI_RC.Core.Savior;
|
|
using ABI_RC.Systems.InputManagement;
|
|
using ABI_RC.Systems.VRModeSwitch;
|
|
using UnityEngine;
|
|
|
|
namespace ml_bft
|
|
{
|
|
// Not an actual module, but can be used as one
|
|
class InputHandler
|
|
{
|
|
public static InputHandler Instance { get; private set; } = null;
|
|
|
|
bool m_active = false;
|
|
|
|
HandHandlerVR m_leftHandHandler = null;
|
|
HandHandlerVR m_rightHandHandler = null;
|
|
|
|
internal InputHandler()
|
|
{
|
|
if(Instance == null)
|
|
Instance = this;
|
|
|
|
m_active = false;
|
|
|
|
if(MetaPort.Instance.isUsingVr)
|
|
SetupHandlers();
|
|
|
|
VRModeSwitchEvents.OnCompletedVRModeSwitch.AddListener(this.OnVRModeSwitch);
|
|
|
|
Settings.OnSkeletalInputChanged.AddListener(this.OnSkeletalInputChanged);
|
|
|
|
GameEvents.OnInputUpdate.AddListener(this.OnInputUpdate);
|
|
}
|
|
internal void Cleanup()
|
|
{
|
|
if(Instance == this)
|
|
Instance = null;
|
|
|
|
RemoveHandlers();
|
|
|
|
VRModeSwitchEvents.OnCompletedVRModeSwitch.RemoveListener(this.OnVRModeSwitch);
|
|
|
|
Settings.OnSkeletalInputChanged.RemoveListener(this.OnSkeletalInputChanged);
|
|
|
|
GameEvents.OnInputUpdate.RemoveListener(this.OnInputUpdate);
|
|
}
|
|
|
|
void SetupHandlers()
|
|
{
|
|
if(!CheckVR.Instance.forceOpenXr)
|
|
{
|
|
m_leftHandHandler = new HandHandlerVR(CVRInputManager.Instance.leftHandTransform, true);
|
|
m_rightHandHandler = new HandHandlerVR(CVRInputManager.Instance.rightHandTransform, false);
|
|
m_active = true;
|
|
}
|
|
}
|
|
void RemoveHandlers()
|
|
{
|
|
m_leftHandHandler?.Cleanup();
|
|
m_leftHandHandler = null;
|
|
m_rightHandHandler?.Cleanup();
|
|
m_rightHandHandler = null;
|
|
m_active = false;
|
|
}
|
|
|
|
public void Rebind(Quaternion p_base)
|
|
{
|
|
if(m_active)
|
|
{
|
|
m_leftHandHandler?.Rebind(p_base);
|
|
m_rightHandHandler?.Rebind(p_base);
|
|
}
|
|
}
|
|
|
|
public Transform GetSourceForBone(HumanBodyBones p_bone, bool p_left)
|
|
{
|
|
Transform l_result;
|
|
if(p_left)
|
|
l_result = m_leftHandHandler?.GetSourceForBone(p_bone);
|
|
else
|
|
l_result = m_rightHandHandler?.GetSourceForBone(p_bone);
|
|
return l_result;
|
|
}
|
|
|
|
// Game events
|
|
internal void OnInputUpdate()
|
|
{
|
|
if(m_active && Settings.SkeletalInput)
|
|
{
|
|
m_leftHandHandler?.Update();
|
|
m_rightHandHandler?.Update();
|
|
|
|
CVRInputManager.Instance.individualFingerTracking = true;
|
|
CVRInputManager.Instance.finger1StretchedLeftThumb = FingerSystem.Instance.m_lastValues[0];
|
|
CVRInputManager.Instance.finger2StretchedLeftThumb = FingerSystem.Instance.m_lastValues[1];
|
|
CVRInputManager.Instance.finger3StretchedLeftThumb = FingerSystem.Instance.m_lastValues[2];
|
|
CVRInputManager.Instance.fingerSpreadLeftThumb = FingerSystem.Instance.m_lastValues[3];
|
|
CVRInputManager.Instance.finger1StretchedLeftIndex = FingerSystem.Instance.m_lastValues[4];
|
|
CVRInputManager.Instance.finger2StretchedLeftIndex = FingerSystem.Instance.m_lastValues[5];
|
|
CVRInputManager.Instance.finger3StretchedLeftIndex = FingerSystem.Instance.m_lastValues[6];
|
|
CVRInputManager.Instance.fingerSpreadLeftIndex = FingerSystem.Instance.m_lastValues[7];
|
|
CVRInputManager.Instance.finger1StretchedLeftMiddle = FingerSystem.Instance.m_lastValues[8];
|
|
CVRInputManager.Instance.finger2StretchedLeftMiddle = FingerSystem.Instance.m_lastValues[9];
|
|
CVRInputManager.Instance.finger3StretchedLeftMiddle = FingerSystem.Instance.m_lastValues[10];
|
|
CVRInputManager.Instance.fingerSpreadLeftMiddle = FingerSystem.Instance.m_lastValues[11];
|
|
CVRInputManager.Instance.finger1StretchedLeftRing = FingerSystem.Instance.m_lastValues[12];
|
|
CVRInputManager.Instance.finger2StretchedLeftRing = FingerSystem.Instance.m_lastValues[13];
|
|
CVRInputManager.Instance.finger3StretchedLeftRing = FingerSystem.Instance.m_lastValues[14];
|
|
CVRInputManager.Instance.fingerSpreadLeftRing = FingerSystem.Instance.m_lastValues[15];
|
|
CVRInputManager.Instance.finger1StretchedLeftPinky = FingerSystem.Instance.m_lastValues[16];
|
|
CVRInputManager.Instance.finger2StretchedLeftPinky = FingerSystem.Instance.m_lastValues[17];
|
|
CVRInputManager.Instance.finger3StretchedLeftPinky = FingerSystem.Instance.m_lastValues[18];
|
|
CVRInputManager.Instance.fingerSpreadLeftPinky = FingerSystem.Instance.m_lastValues[19];
|
|
CVRInputManager.Instance.finger1StretchedRightThumb = FingerSystem.Instance.m_lastValues[20];
|
|
CVRInputManager.Instance.finger2StretchedRightThumb = FingerSystem.Instance.m_lastValues[21];
|
|
CVRInputManager.Instance.finger3StretchedRightThumb = FingerSystem.Instance.m_lastValues[22];
|
|
CVRInputManager.Instance.fingerSpreadRightThumb = FingerSystem.Instance.m_lastValues[23];
|
|
CVRInputManager.Instance.finger1StretchedRightIndex = FingerSystem.Instance.m_lastValues[24];
|
|
CVRInputManager.Instance.finger2StretchedRightIndex = FingerSystem.Instance.m_lastValues[25];
|
|
CVRInputManager.Instance.finger3StretchedRightIndex = FingerSystem.Instance.m_lastValues[26];
|
|
CVRInputManager.Instance.fingerSpreadRightIndex = FingerSystem.Instance.m_lastValues[27];
|
|
CVRInputManager.Instance.finger1StretchedRightMiddle = FingerSystem.Instance.m_lastValues[28];
|
|
CVRInputManager.Instance.finger2StretchedRightMiddle = FingerSystem.Instance.m_lastValues[29];
|
|
CVRInputManager.Instance.finger3StretchedRightMiddle = FingerSystem.Instance.m_lastValues[30];
|
|
CVRInputManager.Instance.fingerSpreadRightMiddle = FingerSystem.Instance.m_lastValues[31];
|
|
CVRInputManager.Instance.finger1StretchedRightRing = FingerSystem.Instance.m_lastValues[32];
|
|
CVRInputManager.Instance.finger2StretchedRightRing = FingerSystem.Instance.m_lastValues[33];
|
|
CVRInputManager.Instance.finger3StretchedRightRing = FingerSystem.Instance.m_lastValues[34];
|
|
CVRInputManager.Instance.fingerSpreadRightRing = FingerSystem.Instance.m_lastValues[35];
|
|
CVRInputManager.Instance.finger1StretchedRightPinky = FingerSystem.Instance.m_lastValues[36];
|
|
CVRInputManager.Instance.finger2StretchedRightPinky = FingerSystem.Instance.m_lastValues[37];
|
|
CVRInputManager.Instance.finger3StretchedRightPinky = FingerSystem.Instance.m_lastValues[38];
|
|
CVRInputManager.Instance.fingerSpreadRightPinky = FingerSystem.Instance.m_lastValues[39];
|
|
}
|
|
}
|
|
|
|
void OnVRModeSwitch(bool p_state)
|
|
{
|
|
try
|
|
{
|
|
if(Utils.IsInVR())
|
|
SetupHandlers();
|
|
else
|
|
RemoveHandlers();
|
|
}
|
|
catch(System.Exception e)
|
|
{
|
|
MelonLoader.MelonLogger.Error(e);
|
|
}
|
|
}
|
|
|
|
// Settings
|
|
void OnSkeletalInputChanged(bool p_value)
|
|
{
|
|
if(!p_value)
|
|
CVRInputManager.Instance.individualFingerTracking = Utils.AreKnucklesInUse();
|
|
}
|
|
}
|
|
}
|