mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 10:29:22 +00:00
Finally, good input
This commit is contained in:
parent
d8c79ed15c
commit
d48944a039
7 changed files with 102 additions and 77 deletions
|
@ -16,6 +16,7 @@ namespace ml_lme
|
|||
CVRInputManager m_inputManager = null;
|
||||
InputModuleSteamVR m_steamVrModule = null;
|
||||
bool m_inVR = false;
|
||||
bool m_gripToGrab = true;
|
||||
|
||||
ControllerRay m_handRayLeft = null;
|
||||
ControllerRay m_handRayRight = null;
|
||||
|
@ -78,9 +79,21 @@ namespace ml_lme
|
|||
OnEnableChange(Settings.Enabled);
|
||||
OnInputChange(Settings.Input);
|
||||
|
||||
MelonLoader.MelonCoroutines.Start(WaitForSettings());
|
||||
MelonLoader.MelonCoroutines.Start(WaitForMaterial());
|
||||
}
|
||||
|
||||
IEnumerator WaitForSettings()
|
||||
{
|
||||
while(MetaPort.Instance == null)
|
||||
yield return null;
|
||||
while(MetaPort.Instance.settings == null)
|
||||
yield return null;
|
||||
|
||||
m_gripToGrab = MetaPort.Instance.settings.GetSettingsBool("ControlUseGripToGrab", true);
|
||||
MetaPort.Instance.settings.settingBoolChanged.AddListener(this.OnGameSettingBoolChange);
|
||||
}
|
||||
|
||||
IEnumerator WaitForMaterial()
|
||||
{
|
||||
while(PlayerSetup.Instance == null)
|
||||
|
@ -114,8 +127,8 @@ namespace ml_lme
|
|||
SetFingersInput(l_data.m_rightHand, false);
|
||||
}
|
||||
|
||||
m_handRayLeft.enabled = (l_data.m_leftHand.m_present && (!m_inVR || (VRTrackerManager.Instance.leftHand == null) || !VRTrackerManager.Instance.leftHand.active || !Settings.FingersOnly));
|
||||
m_handRayRight.enabled = (l_data.m_rightHand.m_present && (!m_inVR || (VRTrackerManager.Instance.rightHand == null) || !VRTrackerManager.Instance.rightHand.active || !Settings.FingersOnly));
|
||||
m_handRayLeft.enabled = (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly));
|
||||
m_handRayRight.enabled = (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly));
|
||||
}
|
||||
|
||||
public override void UpdateInput()
|
||||
|
@ -124,56 +137,60 @@ namespace ml_lme
|
|||
{
|
||||
GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData();
|
||||
|
||||
if(l_data.m_leftHand.m_present && (!m_inVR || (VRTrackerManager.Instance.leftHand == null) || !VRTrackerManager.Instance.leftHand.active || !Settings.FingersOnly))
|
||||
if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly))
|
||||
{
|
||||
float l_strength = l_data.m_leftHand.m_grabStrength;
|
||||
if(m_interactLeft != (l_strength > Settings.HoldThreadhold))
|
||||
{
|
||||
m_interactLeft = (l_strength > Settings.HoldThreadhold);
|
||||
m_inputManager.interactLeftUp |= !m_interactLeft;
|
||||
m_inputManager.interactLeftDown |= m_interactLeft;
|
||||
}
|
||||
if(m_interactLeft)
|
||||
m_inputManager.interactLeftValue = Mathf.InverseLerp(Settings.HoldThreadhold, 1f, l_strength);
|
||||
else
|
||||
m_inputManager.interactLeftValue = Mathf.Max(0f, m_inputManager.interactLeftValue);
|
||||
|
||||
if(m_gripLeft != (l_strength < Settings.ReleaseThreadhold))
|
||||
{
|
||||
m_gripLeft = (l_strength < Settings.ReleaseThreadhold);
|
||||
m_inputManager.gripLeftUp |= !m_gripLeft;
|
||||
m_inputManager.gripLeftDown |= m_gripLeft;
|
||||
}
|
||||
if(m_gripLeft)
|
||||
m_inputManager.gripLeftValue = Mathf.InverseLerp(Settings.ReleaseThreadhold, 0f, l_strength);
|
||||
float l_interactValue = 0f;
|
||||
if(m_gripToGrab)
|
||||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength));
|
||||
else
|
||||
m_inputManager.gripLeftValue = Mathf.Max(0f, m_inputManager.gripLeftValue);
|
||||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength));
|
||||
m_inputManager.interactLeftValue = Mathf.Max(l_interactValue, m_inputManager.interactLeftValue);
|
||||
|
||||
if(m_interactLeft != (l_strength > Settings.InteractThreadhold))
|
||||
{
|
||||
m_interactLeft = (l_strength > Settings.InteractThreadhold);
|
||||
m_inputManager.interactLeftDown |= m_interactLeft;
|
||||
m_inputManager.interactLeftUp |= !m_interactLeft;
|
||||
}
|
||||
|
||||
float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength));
|
||||
m_inputManager.gripLeftValue = Mathf.Max(l_gripValue, m_inputManager.gripLeftValue);
|
||||
if(m_gripLeft != (l_strength > Settings.GripThreadhold))
|
||||
{
|
||||
m_gripLeft = (l_strength > Settings.GripThreadhold);
|
||||
m_inputManager.gripLeftDown |= m_gripLeft;
|
||||
m_inputManager.gripLeftUp |= !m_gripLeft;
|
||||
}
|
||||
}
|
||||
|
||||
if(l_data.m_rightHand.m_present && (!m_inVR || (VRTrackerManager.Instance.rightHand == null) || !VRTrackerManager.Instance.rightHand.active || !Settings.FingersOnly))
|
||||
if(l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly))
|
||||
{
|
||||
float l_strength = l_data.m_rightHand.m_grabStrength;
|
||||
if(m_interactRight != (l_strength > Settings.HoldThreadhold))
|
||||
{
|
||||
m_interactRight = (l_strength > Settings.HoldThreadhold);
|
||||
m_inputManager.interactRightUp |= !m_interactRight;
|
||||
m_inputManager.interactRightDown |= m_interactRight;
|
||||
}
|
||||
if(m_interactRight)
|
||||
m_inputManager.interactRightValue = Mathf.InverseLerp(Settings.HoldThreadhold, 1f, l_strength);
|
||||
else
|
||||
m_inputManager.interactRightValue = Mathf.Max(0f, m_inputManager.interactRightValue);
|
||||
|
||||
if(m_gripRight != (l_strength < Settings.HoldThreadhold))
|
||||
{
|
||||
m_gripRight = (l_strength < Settings.HoldThreadhold);
|
||||
m_inputManager.gripRightUp |= !m_gripRight;
|
||||
m_inputManager.gripRightDown |= m_gripRight;
|
||||
}
|
||||
if(m_gripRight)
|
||||
m_inputManager.gripRightValue = Mathf.InverseLerp(Settings.ReleaseThreadhold, 0f, l_strength);
|
||||
float l_interactValue = 0f;
|
||||
if(m_gripToGrab)
|
||||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength));
|
||||
else
|
||||
m_inputManager.gripRightValue = Mathf.Max(0f, m_inputManager.gripRightValue);
|
||||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength));
|
||||
m_inputManager.interactRightValue = Mathf.Max(l_interactValue, m_inputManager.interactRightValue);
|
||||
|
||||
if(m_interactRight != (l_strength > Settings.InteractThreadhold))
|
||||
{
|
||||
m_interactRight = (l_strength > Settings.InteractThreadhold);
|
||||
m_inputManager.interactRightDown |= m_interactRight;
|
||||
m_inputManager.interactRightUp |= !m_interactRight;
|
||||
}
|
||||
|
||||
float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength));
|
||||
m_inputManager.gripRightValue = Mathf.Max(l_gripValue, m_inputManager.gripRightValue);
|
||||
if(m_gripRight != (l_strength > Settings.GripThreadhold))
|
||||
{
|
||||
m_gripRight = (l_strength > Settings.GripThreadhold);
|
||||
m_inputManager.gripRightDown |= m_gripRight;
|
||||
m_inputManager.gripRightUp |= !m_gripRight;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,8 +204,8 @@ namespace ml_lme
|
|||
|
||||
void OnInputChange(bool p_state)
|
||||
{
|
||||
(m_handRayLeft as MonoBehaviour).enabled = (p_state && Settings.Enabled);
|
||||
(m_handRayRight as MonoBehaviour).enabled = (p_state && Settings.Enabled);
|
||||
((MonoBehaviour)m_handRayLeft).enabled = (p_state && Settings.Enabled);
|
||||
((MonoBehaviour)m_handRayRight).enabled = (p_state && Settings.Enabled);
|
||||
m_lineLeft.enabled = (p_state && Settings.Enabled);
|
||||
m_lineRight.enabled = (p_state && Settings.Enabled);
|
||||
|
||||
|
@ -259,5 +276,11 @@ namespace ml_lme
|
|||
IKSystem.Instance.FingerSystem.rightPinkyCurl = p_hand.m_bends[4];
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameSettingBoolChange(string p_name, bool p_state)
|
||||
{
|
||||
if(p_name == "ControlUseGripToGrab")
|
||||
m_gripToGrab = p_state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue