diff --git a/doc/classes/XRBodyTracker.xml b/doc/classes/XRBodyTracker.xml index 06a48799531..42ff6114440 100644 --- a/doc/classes/XRBodyTracker.xml +++ b/doc/classes/XRBodyTracker.xml @@ -289,7 +289,40 @@ Right pinky finger tip joint. - + + Lower chest joint. + + + Left scapula joint. + + + Left wrist twist joint. + + + Right scapula joint. + + + Right wrist twist joint. + + + Left ankle twist joint. + + + Left ankle joint. + + + Left middle foot joint. + + + Right ankle twist joint. + + + Right ankle joint. + + + Right middle foot joint. + + Represents the size of the [enum Joint] enum. diff --git a/scene/3d/xr/xr_body_modifier_3d.cpp b/scene/3d/xr/xr_body_modifier_3d.cpp index 80f00d8bdc4..75328154598 100644 --- a/scene/3d/xr/xr_body_modifier_3d.cpp +++ b/scene/3d/xr/xr_body_modifier_3d.cpp @@ -82,7 +82,7 @@ XRBodyModifier3D::BoneUpdate XRBodyModifier3D::get_bone_update() const { } void XRBodyModifier3D::_get_joint_data() { - // Table of Godot Humanoid bone names. + // Table of Godot Humanoid bone names with some additions. static const String bone_names[XRBodyTracker::JOINT_MAX] = { "Root", // XRBodyTracker::JOINT_ROOT @@ -168,6 +168,19 @@ void XRBodyModifier3D::_get_joint_data() { "RightLittleIntermediate", // XRBodyTracker::JOINT_RIGHT_PINKY_FINGER_PHALANX_INTERMEDIATE "RightLittleDistal", // XRBodyTracker::JOINT_RIGHT_PINKY_FINGER_PHALANX_DISTAL "RightLittleTip", // XRBodyTracker::JOINT_RIGHT_PINKY_FINGER_TIP + + // Extra Joints. + "LowerChest", // XRBodyTracker::JOINT_LOWER_CHEST + "LeftScapula", // XRBodyTracker::JOINT_LEFT_SCAPULA + "LeftWristTwist", // XRBodyTracker::JOINT_LEFT_WRIST_TWIST + "RightScapula", // XRBodyTracker::JOINT_RIGHT_SCAPULA + "RightWristTwist", // XRBodyTracker::JOINT_RIGHT_WRIST_TWIST + "LeftAnkleTwist", // XRBodyTracker::JOINT_LEFT_ANKLE_TWIST + "LeftAnkle", // XRBodyTracker::JOINT_LEFT_ANKLE + "LeftMiddleFoot", // XRBodyTracker::JOINT_LEFT_MIDDLE_FOOT + "RightAnkleTwist", // XRBodyTracker::JOINT_RIGHT_ANKLE_TWIST + "RightAnkle", // XRBodyTracker::JOINT_RIGHT_ANKLE + "RightMiddleFoot", // XRBodyTracker::JOINT_RIGHT_MIDDLE_FOOT }; // reset JIC. diff --git a/servers/xr/xr_body_tracker.cpp b/servers/xr/xr_body_tracker.cpp index 9c82b809113..3f3b6b0670c 100644 --- a/servers/xr/xr_body_tracker.cpp +++ b/servers/xr/xr_body_tracker.cpp @@ -126,6 +126,17 @@ void XRBodyTracker::_bind_methods() { BIND_ENUM_CONSTANT(JOINT_RIGHT_PINKY_FINGER_PHALANX_INTERMEDIATE); BIND_ENUM_CONSTANT(JOINT_RIGHT_PINKY_FINGER_PHALANX_DISTAL); BIND_ENUM_CONSTANT(JOINT_RIGHT_PINKY_FINGER_TIP); + BIND_ENUM_CONSTANT(JOINT_LOWER_CHEST); + BIND_ENUM_CONSTANT(JOINT_LEFT_SCAPULA); + BIND_ENUM_CONSTANT(JOINT_LEFT_WRIST_TWIST); + BIND_ENUM_CONSTANT(JOINT_RIGHT_SCAPULA); + BIND_ENUM_CONSTANT(JOINT_RIGHT_WRIST_TWIST); + BIND_ENUM_CONSTANT(JOINT_LEFT_ANKLE_TWIST); + BIND_ENUM_CONSTANT(JOINT_LEFT_ANKLE); + BIND_ENUM_CONSTANT(JOINT_LEFT_MIDDLE_FOOT); + BIND_ENUM_CONSTANT(JOINT_RIGHT_ANKLE_TWIST); + BIND_ENUM_CONSTANT(JOINT_RIGHT_ANKLE); + BIND_ENUM_CONSTANT(JOINT_RIGHT_MIDDLE_FOOT); BIND_ENUM_CONSTANT(JOINT_MAX); BIND_BITFIELD_FLAG(JOINT_FLAG_ORIENTATION_VALID); diff --git a/servers/xr/xr_body_tracker.h b/servers/xr/xr_body_tracker.h index dbf8b30a0a8..848509d8982 100644 --- a/servers/xr/xr_body_tracker.h +++ b/servers/xr/xr_body_tracker.h @@ -129,6 +129,19 @@ public: JOINT_RIGHT_PINKY_FINGER_PHALANX_DISTAL, JOINT_RIGHT_PINKY_FINGER_TIP, + // Extra joints that aren't part of the Godot humanoid skeleton, but are commonly used in some VR avatars. + JOINT_LOWER_CHEST, + JOINT_LEFT_SCAPULA, + JOINT_LEFT_WRIST_TWIST, + JOINT_RIGHT_SCAPULA, + JOINT_RIGHT_WRIST_TWIST, + JOINT_LEFT_ANKLE_TWIST, + JOINT_LEFT_ANKLE, + JOINT_LEFT_MIDDLE_FOOT, + JOINT_RIGHT_ANKLE_TWIST, + JOINT_RIGHT_ANKLE, + JOINT_RIGHT_MIDDLE_FOOT, + JOINT_MAX, };