summaryrefslogtreecommitdiffstats
path: root/modules/openxr/scene/openxr_hand.h
diff options
context:
space:
mode:
Diffstat (limited to 'modules/openxr/scene/openxr_hand.h')
-rw-r--r--modules/openxr/scene/openxr_hand.h35
1 files changed, 31 insertions, 4 deletions
diff --git a/modules/openxr/scene/openxr_hand.h b/modules/openxr/scene/openxr_hand.h
index edfb474ac7..4c77e7277c 100644
--- a/modules/openxr/scene/openxr_hand.h
+++ b/modules/openxr/scene/openxr_hand.h
@@ -55,20 +55,39 @@ public:
MOTION_RANGE_MAX
};
+ enum SkeletonRig {
+ SKELETON_RIG_OPENXR,
+ SKELETON_RIG_HUMANOID,
+ SKELETON_RIG_MAX
+ };
+
+ enum BoneUpdate {
+ BONE_UPDATE_FULL,
+ BONE_UPDATE_ROTATION_ONLY,
+ BONE_UPDATE_MAX
+ };
+
private:
+ struct JointData {
+ int bone = -1;
+ int parent_joint = -1;
+ };
+
OpenXRAPI *openxr_api = nullptr;
OpenXRHandTrackingExtension *hand_tracking_ext = nullptr;
Hands hand = HAND_LEFT;
MotionRange motion_range = MOTION_RANGE_UNOBSTRUCTED;
NodePath hand_skeleton;
+ SkeletonRig skeleton_rig = SKELETON_RIG_OPENXR;
+ BoneUpdate bone_update = BONE_UPDATE_FULL;
- int64_t bones[XR_HAND_JOINT_COUNT_EXT];
+ JointData joints[XR_HAND_JOINT_COUNT_EXT];
void _set_motion_range();
Skeleton3D *get_skeleton();
- void _get_bones();
+ void _get_joint_data();
void _update_skeleton();
protected:
@@ -77,19 +96,27 @@ protected:
public:
OpenXRHand();
- void set_hand(const Hands p_hand);
+ void set_hand(Hands p_hand);
Hands get_hand() const;
- void set_motion_range(const MotionRange p_motion_range);
+ void set_motion_range(MotionRange p_motion_range);
MotionRange get_motion_range() const;
void set_hand_skeleton(const NodePath &p_hand_skeleton);
NodePath get_hand_skeleton() const;
+ void set_skeleton_rig(SkeletonRig p_skeleton_rig);
+ SkeletonRig get_skeleton_rig() const;
+
+ void set_bone_update(BoneUpdate p_bone_update);
+ BoneUpdate get_bone_update() const;
+
void _notification(int p_what);
};
VARIANT_ENUM_CAST(OpenXRHand::Hands)
VARIANT_ENUM_CAST(OpenXRHand::MotionRange)
+VARIANT_ENUM_CAST(OpenXRHand::SkeletonRig)
+VARIANT_ENUM_CAST(OpenXRHand::BoneUpdate)
#endif // OPENXR_HAND_H