Files
Sean Lu(呂祥榮) 3dd72f5f56 version 2.4.0
2024-07-03 14:58:53 +08:00

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;
}
}
}