Update to game build 2024r174ex3

Bones oriented fingers tracking
This commit is contained in:
SDraw 2024-03-06 02:31:06 +03:00
parent 60259c94c4
commit b547512b69
No known key found for this signature in database
GPG key ID: BB95B4DAB2BB8BB5
12 changed files with 1677 additions and 1395 deletions

View file

@ -84,26 +84,56 @@ namespace ml_pmc
ref readonly float[] l_curls = ref m_puppetParser.GetFingerCurls();
ref readonly float[] l_spreads = ref m_puppetParser.GetFingerSpreads();
CVRInputManager.Instance.fingerCurlLeftThumb = l_curls[l_mirror ? 5 : 0];
CVRInputManager.Instance.fingerCurlLeftIndex = l_curls[l_mirror ? 6 : 1];
CVRInputManager.Instance.fingerCurlLeftMiddle = l_curls[l_mirror ? 7 : 2];
CVRInputManager.Instance.fingerCurlLeftRing = l_curls[l_mirror ? 8 : 3];
CVRInputManager.Instance.fingerCurlLeftPinky = l_curls[l_mirror ? 9 : 4];
CVRInputManager.Instance.fingerCurlRightThumb = l_curls[l_mirror ? 0 : 5];
CVRInputManager.Instance.fingerCurlRightIndex = l_curls[l_mirror ? 1 : 6];
CVRInputManager.Instance.fingerCurlRightMiddle = l_curls[l_mirror ? 2 : 7];
CVRInputManager.Instance.fingerCurlRightRing = l_curls[l_mirror ? 3 : 8];
CVRInputManager.Instance.fingerCurlRightPinky = l_curls[l_mirror ? 4 : 9];
// Left hand
CVRInputManager.Instance.finger1StretchedLeftThumb = l_curls[l_mirror ? 15 : 0];
CVRInputManager.Instance.finger2StretchedLeftThumb = l_curls[l_mirror ? 16 : 1];
CVRInputManager.Instance.finger3StretchedLeftThumb = l_curls[l_mirror ? 17 : 2];
CVRInputManager.Instance.fingerSpreadLeftThumb = l_spreads[l_mirror ? 5 : 0];
CVRInputManager.Instance.finger1StretchedLeftIndex = l_curls[l_mirror ? 18 : 3];
CVRInputManager.Instance.finger2StretchedLeftIndex = l_curls[l_mirror ? 19 : 4];
CVRInputManager.Instance.finger3StretchedLeftIndex = l_curls[l_mirror ? 20 : 5];
CVRInputManager.Instance.fingerSpreadLeftIndex = l_spreads[l_mirror ? 6 : 1];
CVRInputManager.Instance.finger1StretchedLeftMiddle = l_curls[l_mirror ? 21 : 6];
CVRInputManager.Instance.finger2StretchedLeftMiddle = l_curls[l_mirror ? 22 : 7];
CVRInputManager.Instance.finger3StretchedLeftMiddle = l_curls[l_mirror ? 23 : 8];
CVRInputManager.Instance.fingerSpreadLeftMiddle = l_spreads[l_mirror ? 7 : 2];
CVRInputManager.Instance.finger1StretchedLeftRing = l_curls[l_mirror ? 24 : 9];
CVRInputManager.Instance.finger2StretchedLeftRing = l_curls[l_mirror ? 25 : 10];
CVRInputManager.Instance.finger3StretchedLeftRing = l_curls[l_mirror ? 26 : 11];
CVRInputManager.Instance.fingerSpreadLeftRing = l_spreads[l_mirror ? 8 : 3];
CVRInputManager.Instance.finger1StretchedLeftPinky = l_curls[l_mirror ? 27 : 12];
CVRInputManager.Instance.finger2StretchedLeftPinky = l_curls[l_mirror ? 28 : 13];
CVRInputManager.Instance.finger3StretchedLeftPinky = l_curls[l_mirror ? 29 : 14];
CVRInputManager.Instance.fingerSpreadLeftPinky = l_spreads[l_mirror ? 9 : 4];
// Right hand
CVRInputManager.Instance.finger1StretchedRightThumb = l_curls[l_mirror ? 0 : 15];
CVRInputManager.Instance.finger2StretchedRightThumb = l_curls[l_mirror ? 1 : 16];
CVRInputManager.Instance.finger3StretchedRightThumb = l_curls[l_mirror ? 2 : 17];
CVRInputManager.Instance.fingerSpreadRightThumb = l_spreads[l_mirror ? 0 : 5];
CVRInputManager.Instance.finger1StretchedRightIndex = l_curls[l_mirror ? 3 : 18];
CVRInputManager.Instance.finger2StretchedRightIndex = l_curls[l_mirror ? 4 : 19];
CVRInputManager.Instance.finger3StretchedRightIndex = l_curls[l_mirror ? 5 : 20];
CVRInputManager.Instance.fingerSpreadRightIndex = l_spreads[l_mirror ? 1 : 6];
CVRInputManager.Instance.finger1StretchedRightMiddle = l_curls[l_mirror ? 6 : 21];
CVRInputManager.Instance.finger2StretchedRightMiddle = l_curls[l_mirror ? 7 : 22];
CVRInputManager.Instance.finger3StretchedRightMiddle = l_curls[l_mirror ? 8 : 23];
CVRInputManager.Instance.fingerSpreadRightMiddle = l_spreads[l_mirror ? 2 : 7];
CVRInputManager.Instance.finger1StretchedRightRing = l_curls[l_mirror ? 9 : 24];
CVRInputManager.Instance.finger2StretchedRightRing = l_curls[l_mirror ? 10 : 25];
CVRInputManager.Instance.finger3StretchedRightRing = l_curls[l_mirror ? 11 : 26];
CVRInputManager.Instance.fingerSpreadRightRing = l_spreads[l_mirror ? 3 : 8];
CVRInputManager.Instance.finger1StretchedRightPinky = l_curls[l_mirror ? 12 : 27];
CVRInputManager.Instance.finger2StretchedRightPinky = l_curls[l_mirror ? 13 : 28];
CVRInputManager.Instance.finger3StretchedRightPinky = l_curls[l_mirror ? 14 : 29];
CVRInputManager.Instance.fingerSpreadRightPinky = l_spreads[l_mirror ? 4 : 9];
}
else
@ -341,27 +371,69 @@ namespace ml_pmc
if(!CVRInputManager.Instance.individualFingerTracking)
{
CVRInputManager.Instance.fingerCurlLeftThumb = 0f;
CVRInputManager.Instance.fingerCurlLeftIndex = 0f;
CVRInputManager.Instance.fingerCurlLeftMiddle = 0f;
CVRInputManager.Instance.fingerCurlLeftRing = 0f;
CVRInputManager.Instance.fingerCurlLeftPinky = 0f;
CVRInputManager.Instance.fingerCurlRightThumb = 0f;
CVRInputManager.Instance.fingerCurlRightIndex = 0f;
CVRInputManager.Instance.fingerCurlRightMiddle = 0f;
CVRInputManager.Instance.fingerCurlRightRing = 0f;
CVRInputManager.Instance.fingerCurlRightPinky = 0f;
// Left hand
CVRInputManager.Instance.finger1StretchedLeftThumb = -0.5f;
CVRInputManager.Instance.finger2StretchedLeftThumb = 0.7f;
CVRInputManager.Instance.finger3StretchedLeftThumb = 0.7f;
CVRInputManager.Instance.fingerSpreadLeftThumb = 0f;
CVRInputManager.Instance.fingerSpreadLeftThumb = 0.5f;
CVRInputManager.Instance.fingerSpreadLeftIndex = 0.5f;
CVRInputManager.Instance.fingerSpreadLeftMiddle = 0.5f;
CVRInputManager.Instance.fingerSpreadLeftRing = 0.5f;
CVRInputManager.Instance.fingerSpreadLeftPinky = 0.5f;
CVRInputManager.Instance.fingerSpreadRightThumb = 0.5f;
CVRInputManager.Instance.fingerSpreadRightIndex = 0.5f;
CVRInputManager.Instance.fingerSpreadRightMiddle = 0.5f;
CVRInputManager.Instance.fingerSpreadRightRing = 0.5f;
CVRInputManager.Instance.fingerSpreadRightPinky = 0.5f;
CVRInputManager.Instance.finger1StretchedLeftIndex = 0.5f;
CVRInputManager.Instance.finger2StretchedLeftIndex = 0.7f;
CVRInputManager.Instance.finger3StretchedLeftIndex = 0.7f;
CVRInputManager.Instance.fingerSpreadLeftIndex = 0f;
CVRInputManager.Instance.finger1StretchedLeftMiddle = 0.5f;
CVRInputManager.Instance.finger2StretchedLeftMiddle = 0.7f;
CVRInputManager.Instance.finger3StretchedLeftMiddle = 0.7f;
CVRInputManager.Instance.fingerSpreadLeftMiddle = 0f;
CVRInputManager.Instance.finger1StretchedLeftRing = 0.5f;
CVRInputManager.Instance.finger2StretchedLeftRing = 0.7f;
CVRInputManager.Instance.finger3StretchedLeftRing = 0.7f;
CVRInputManager.Instance.fingerSpreadLeftRing = 0f;
CVRInputManager.Instance.finger1StretchedLeftPinky = 0.5f;
CVRInputManager.Instance.finger2StretchedLeftPinky = 0.7f;
CVRInputManager.Instance.finger3StretchedLeftPinky = 0.7f;
CVRInputManager.Instance.fingerSpreadLeftPinky = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedLeftThumb = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedLeftIndex = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedLeftMiddle = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedLeftRing = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedLeftPinky = 0f;
// Right hand
CVRInputManager.Instance.finger1StretchedRightThumb = -0.5f;
CVRInputManager.Instance.finger2StretchedRightThumb = 0.7f;
CVRInputManager.Instance.finger3StretchedRightThumb = 0.7f;
CVRInputManager.Instance.fingerSpreadRightThumb = 0f;
CVRInputManager.Instance.finger1StretchedRightIndex = 0.5f;
CVRInputManager.Instance.finger2StretchedRightIndex = 0.7f;
CVRInputManager.Instance.finger3StretchedRightIndex = 0.7f;
CVRInputManager.Instance.fingerSpreadRightIndex = 0f;
CVRInputManager.Instance.finger1StretchedRightMiddle = 0.5f;
CVRInputManager.Instance.finger2StretchedRightMiddle = 0.7f;
CVRInputManager.Instance.finger3StretchedRightMiddle = 0.7f;
CVRInputManager.Instance.fingerSpreadRightMiddle = 0f;
CVRInputManager.Instance.finger1StretchedRightRing = 0.5f;
CVRInputManager.Instance.finger2StretchedRightRing = 0.7f;
CVRInputManager.Instance.finger3StretchedRightRing = 0.7f;
CVRInputManager.Instance.fingerSpreadRightRing = 0f;
CVRInputManager.Instance.finger1StretchedRightPinky = 0.5f;
CVRInputManager.Instance.finger2StretchedRightPinky = 0.7f;
CVRInputManager.Instance.finger3StretchedRightPinky = 0.7f;
CVRInputManager.Instance.fingerSpreadRightPinky = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedRightThumb = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedRightIndex = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedRightMiddle = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedRightRing = 0f;
CVRInputManager.Instance.fingerFullCurlNormalizedRightPinky = 0f;
}
}
}

View file

@ -1,108 +1,136 @@
using ABI_RC.Core.Player;
using UnityEngine;
namespace ml_pmc
{
[DisallowMultipleComponent]
class PuppetParser : MonoBehaviour
{
internal PuppetMaster m_puppetMaster = null;
Animator m_animator = null;
AnimatorCullingMode m_cullMode;
HumanPoseHandler m_poseHandler = null;
HumanPose m_pose;
Matrix4x4 m_matrix = Matrix4x4.identity;
Matrix4x4 m_offset = Matrix4x4.identity;
bool m_sitting = false;
float m_leftGesture = 0f;
float m_rightGesture = 0f;
bool m_fingerTracking = false;
readonly float[] m_fingerCurls = null;
readonly float[] m_fingerSpreads = null;
internal PuppetParser()
{
m_fingerCurls = new float[10];
m_fingerSpreads = new float[10];
}
// Unity events
void Start()
{
m_animator = this.GetComponent<Animator>();
m_cullMode = m_animator.cullingMode;
m_animator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform);
m_poseHandler.GetHumanPose(ref m_pose);
m_matrix = this.transform.GetMatrix();
}
void OnDestroy()
{
m_puppetMaster = null;
if(m_animator != null)
m_animator.cullingMode = m_cullMode;
m_animator = null;
m_poseHandler?.Dispose();
m_poseHandler = null;
}
void Update()
{
if(m_puppetMaster != null)
{
m_sitting = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorSitting;
m_leftGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureLeft;
m_rightGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureRight;
m_fingerTracking = m_puppetMaster.PlayerAvatarMovementDataInput.IndexUseIndividualFingers;
if(m_fingerTracking)
{
m_fingerCurls[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumbCurl;
m_fingerCurls[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndexCurl;
m_fingerCurls[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddleCurl;
m_fingerCurls[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRingCurl;
m_fingerCurls[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinkyCurl;
m_fingerCurls[5] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumbCurl;
m_fingerCurls[6] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndexCurl;
m_fingerCurls[7] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddleCurl;
m_fingerCurls[8] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRingCurl;
m_fingerCurls[9] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinkyCurl;
m_fingerSpreads[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumbSpread;
m_fingerSpreads[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndexSpread;
m_fingerSpreads[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddleSpread;
m_fingerSpreads[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRingSpread;
m_fingerSpreads[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinkySpread;
m_fingerSpreads[5] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumbSpread;
m_fingerSpreads[6] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndexSpread;
m_fingerSpreads[7] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddleSpread;
m_fingerSpreads[8] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRingSpread;
m_fingerSpreads[9] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinkySpread;
}
Matrix4x4 l_current = this.transform.GetMatrix();
m_offset = m_matrix.inverse * l_current;
m_matrix = l_current;
}
}
void LateUpdate()
{
if((m_animator != null) && (m_poseHandler != null))
m_poseHandler.GetHumanPose(ref m_pose);
}
public ref HumanPose GetPose() => ref m_pose;
public ref Matrix4x4 GetLastOffset() => ref m_offset;
public bool IsSitting() => m_sitting;
public float GetLeftGesture() => m_leftGesture;
public float GetRightGesture() => m_rightGesture;
public bool HasFingerTracking() => m_fingerTracking;
public ref readonly float[] GetFingerCurls() => ref m_fingerCurls;
public ref readonly float[] GetFingerSpreads() => ref m_fingerSpreads;
}
}
using ABI_RC.Core.Player;
using UnityEngine;
namespace ml_pmc
{
[DisallowMultipleComponent]
class PuppetParser : MonoBehaviour
{
internal PuppetMaster m_puppetMaster = null;
Animator m_animator = null;
AnimatorCullingMode m_cullMode;
HumanPoseHandler m_poseHandler = null;
HumanPose m_pose;
Matrix4x4 m_matrix = Matrix4x4.identity;
Matrix4x4 m_offset = Matrix4x4.identity;
bool m_sitting = false;
float m_leftGesture = 0f;
float m_rightGesture = 0f;
bool m_fingerTracking = false;
readonly float[] m_fingerCurls = null;
readonly float[] m_fingerSpreads = null;
internal PuppetParser()
{
m_fingerCurls = new float[30];
m_fingerSpreads = new float[10];
}
// Unity events
void Start()
{
m_animator = this.GetComponent<Animator>();
m_cullMode = m_animator.cullingMode;
m_animator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform);
m_poseHandler.GetHumanPose(ref m_pose);
m_matrix = this.transform.GetMatrix();
}
void OnDestroy()
{
m_puppetMaster = null;
if(m_animator != null)
m_animator.cullingMode = m_cullMode;
m_animator = null;
m_poseHandler?.Dispose();
m_poseHandler = null;
}
void Update()
{
if(m_puppetMaster != null)
{
m_sitting = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorSitting;
m_leftGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureLeft;
m_rightGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureRight;
m_fingerTracking = m_puppetMaster.PlayerAvatarMovementDataInput.UseIndividualFingers;
if(m_fingerTracking)
{
m_fingerCurls[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumb1Stretched;
m_fingerCurls[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumb2Stretched;
m_fingerCurls[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumb3Stretched;
m_fingerSpreads[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumbSpread;
m_fingerCurls[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndex1Stretched;
m_fingerCurls[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndex2Stretched;
m_fingerCurls[5] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndex3Stretched;
m_fingerSpreads[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndexSpread;
m_fingerCurls[6] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddle1Stretched;
m_fingerCurls[7] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddle2Stretched;
m_fingerCurls[8] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddle3Stretched;
m_fingerSpreads[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddleSpread;
m_fingerCurls[9] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRing1Stretched;
m_fingerCurls[10] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRing2Stretched;
m_fingerCurls[11] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRing3Stretched;
m_fingerSpreads[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRingSpread;
m_fingerCurls[12] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinky1Stretched;
m_fingerCurls[13] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinky2Stretched;
m_fingerCurls[14] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinky3Stretched;
m_fingerSpreads[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinkySpread;
m_fingerCurls[15] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumb1Stretched;
m_fingerCurls[16] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumb2Stretched;
m_fingerCurls[17] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumb3Stretched;
m_fingerSpreads[5] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumbSpread;
m_fingerCurls[18] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndex1Stretched;
m_fingerCurls[19] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndex2Stretched;
m_fingerCurls[20] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndex3Stretched;
m_fingerSpreads[6] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndexSpread;
m_fingerCurls[21] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddle1Stretched;
m_fingerCurls[22] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddle2Stretched;
m_fingerCurls[23] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddle3Stretched;
m_fingerSpreads[7] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddleSpread;
m_fingerCurls[24] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRing1Stretched;
m_fingerCurls[25] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRing2Stretched;
m_fingerCurls[26] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRing3Stretched;
m_fingerSpreads[8] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRingSpread;
m_fingerCurls[27] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinky1Stretched;
m_fingerCurls[28] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinky2Stretched;
m_fingerCurls[29] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinky3Stretched;
m_fingerSpreads[9] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinkySpread;
}
Matrix4x4 l_current = this.transform.GetMatrix();
m_offset = m_matrix.inverse * l_current;
m_matrix = l_current;
}
}
void LateUpdate()
{
if((m_animator != null) && (m_poseHandler != null))
m_poseHandler.GetHumanPose(ref m_pose);
}
public ref HumanPose GetPose() => ref m_pose;
public ref Matrix4x4 GetLastOffset() => ref m_offset;
public bool IsSitting() => m_sitting;
public float GetLeftGesture() => m_leftGesture;
public float GetRightGesture() => m_rightGesture;
public bool HasFingerTracking() => m_fingerTracking;
public ref readonly float[] GetFingerCurls() => ref m_fingerCurls;
public ref readonly float[] GetFingerSpreads() => ref m_fingerSpreads;
}
}