77 lines
2.2 KiB
C#
77 lines
2.2 KiB
C#
using System.Linq;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
|
|
namespace VIVE.OpenXR.Toolkits.RealisticHandInteraction
|
|
{
|
|
public abstract class HandPose : MonoBehaviour
|
|
{
|
|
#region Log
|
|
private const string LOG_TAG = "Wave.Essence.Hand.Interaction.HandPose";
|
|
private static StringBuilder m_sb = null;
|
|
protected static StringBuilder sb
|
|
{
|
|
get
|
|
{
|
|
if (m_sb == null) { m_sb = new StringBuilder(); }
|
|
return m_sb;
|
|
}
|
|
}
|
|
protected void DEBUG(string msg) { Debug.Log($"{LOG_TAG}.{m_PoseType}, {msg}"); }
|
|
protected void WARNING(string msg) { Debug.LogWarning($"{LOG_TAG}.{m_PoseType}, {msg}"); }
|
|
protected void ERROR(string msg) { Debug.LogError($"{LOG_TAG}.{m_PoseType}, {msg}"); }
|
|
#endregion
|
|
|
|
protected HandPoseType m_PoseType = HandPoseType.UNKNOWN;
|
|
protected bool m_Initialized = false;
|
|
protected bool m_IsTracked = false;
|
|
protected const int poseCount = (int)JointType.Count;
|
|
protected Vector3[] m_Position = Enumerable.Repeat(Vector3.zero, poseCount).ToArray();
|
|
protected Vector3[] m_LocalPosition = Enumerable.Repeat(Vector3.zero, poseCount).ToArray();
|
|
protected Quaternion[] m_Rotation = Enumerable.Repeat(Quaternion.identity, poseCount).ToArray();
|
|
protected Quaternion[] m_LocalRotation = Enumerable.Repeat(Quaternion.identity, poseCount).ToArray();
|
|
|
|
protected virtual void OnEnable()
|
|
{
|
|
HandPoseProvider.RegisterHandPose(m_PoseType, this);
|
|
}
|
|
protected virtual void OnDisable()
|
|
{
|
|
HandPoseProvider.UnregisterHandPose(m_PoseType);
|
|
}
|
|
|
|
public virtual void SetType(HandPoseType poseType)
|
|
{
|
|
m_PoseType = poseType;
|
|
m_Initialized = true;
|
|
}
|
|
|
|
public virtual bool IsTracked()
|
|
{
|
|
return m_IsTracked;
|
|
}
|
|
|
|
public virtual bool GetRotation(JointType joint, out Quaternion value, bool local = false)
|
|
{
|
|
value = Quaternion.identity;
|
|
if (joint != JointType.Count)
|
|
{
|
|
value = local ? m_LocalRotation[(int)joint] : m_Rotation[(int)joint];
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public virtual bool GetPosition(JointType joint, out Vector3 value, bool local = false)
|
|
{
|
|
value = Vector3.zero;
|
|
if (joint != JointType.Count)
|
|
{
|
|
value = local ? m_LocalPosition[(int)joint] : m_Position[(int)joint];
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|