From 334449df702d911d5f220497f74e321e56492504 Mon Sep 17 00:00:00 2001
From: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
Date: Tue, 26 Mar 2024 17:09:09 +0100
Subject: [PATCH] [Animation] Expose `SkeletonProfile.set/is_required`
---
doc/classes/SkeletonProfile.xml | 16 +++++++
editor/plugins/bone_map_editor_plugin.cpp | 2 +-
scene/resources/skeleton_profile.cpp | 57 ++++++++++++-----------
scene/resources/skeleton_profile.h | 12 ++---
4 files changed, 53 insertions(+), 34 deletions(-)
diff --git a/doc/classes/SkeletonProfile.xml b/doc/classes/SkeletonProfile.xml
index 3ed29668e4f..b5bb4e36390 100644
--- a/doc/classes/SkeletonProfile.xml
+++ b/doc/classes/SkeletonProfile.xml
@@ -83,6 +83,14 @@
Returns the texture of the group at [param group_idx] that will be the drawing group background image in the [BoneMap] editor.
+
+
+
+
+ Returns whether the bone at [param bone_idx] is required for retargeting.
+ This value is used by the bone map editor. If this method returns [code]true[/code], and no bone is assigned, the handle color will be red on the bone map editor.
+
+
@@ -141,6 +149,14 @@
Sets the reference pose transform for bone [param bone_idx].
+
+
+
+
+
+ Sets the required status for bone [param bone_idx] to [param required].
+
+
diff --git a/editor/plugins/bone_map_editor_plugin.cpp b/editor/plugins/bone_map_editor_plugin.cpp
index e80f299f424..5e04ee5d020 100644
--- a/editor/plugins/bone_map_editor_plugin.cpp
+++ b/editor/plugins/bone_map_editor_plugin.cpp
@@ -421,7 +421,7 @@ void BoneMapper::recreate_editor() {
for (int i = 0; i < len; i++) {
if (profile->get_group(i) == profile->get_group_name(current_group_idx)) {
- BoneMapperButton *mb = memnew(BoneMapperButton(profile->get_bone_name(i), profile->is_require(i), current_bone_idx == i));
+ BoneMapperButton *mb = memnew(BoneMapperButton(profile->get_bone_name(i), profile->is_required(i), current_bone_idx == i));
mb->connect("pressed", callable_mp(this, &BoneMapper::set_current_bone_idx).bind(i), CONNECT_DEFERRED);
mb->set_h_grow_direction(GROW_DIRECTION_BOTH);
mb->set_v_grow_direction(GROW_DIRECTION_BOTH);
diff --git a/scene/resources/skeleton_profile.cpp b/scene/resources/skeleton_profile.cpp
index 24ed480289c..2c1d3d4a4c1 100644
--- a/scene/resources/skeleton_profile.cpp
+++ b/scene/resources/skeleton_profile.cpp
@@ -68,7 +68,7 @@ bool SkeletonProfile::_set(const StringName &p_path, const Variant &p_value) {
} else if (what == "group") {
set_group(which, p_value);
} else if (what == "require") {
- set_require(which, p_value);
+ set_required(which, p_value);
} else {
return false;
}
@@ -113,7 +113,7 @@ bool SkeletonProfile::_get(const StringName &p_path, Variant &r_ret) const {
} else if (what == "group") {
r_ret = get_group(which);
} else if (what == "require") {
- r_ret = is_require(which);
+ r_ret = is_required(which);
} else {
return false;
}
@@ -299,7 +299,7 @@ SkeletonProfile::TailDirection SkeletonProfile::get_tail_direction(int p_bone_id
return bones[p_bone_idx].tail_direction;
}
-void SkeletonProfile::set_tail_direction(int p_bone_idx, const TailDirection p_tail_direction) {
+void SkeletonProfile::set_tail_direction(int p_bone_idx, TailDirection p_tail_direction) {
if (is_read_only) {
return;
}
@@ -328,7 +328,7 @@ Transform3D SkeletonProfile::get_reference_pose(int p_bone_idx) const {
return bones[p_bone_idx].reference_pose;
}
-void SkeletonProfile::set_reference_pose(int p_bone_idx, const Transform3D p_reference_pose) {
+void SkeletonProfile::set_reference_pose(int p_bone_idx, const Transform3D &p_reference_pose) {
if (is_read_only) {
return;
}
@@ -342,7 +342,7 @@ Vector2 SkeletonProfile::get_handle_offset(int p_bone_idx) const {
return bones[p_bone_idx].handle_offset;
}
-void SkeletonProfile::set_handle_offset(int p_bone_idx, const Vector2 p_handle_offset) {
+void SkeletonProfile::set_handle_offset(int p_bone_idx, const Vector2 &p_handle_offset) {
if (is_read_only) {
return;
}
@@ -365,17 +365,17 @@ void SkeletonProfile::set_group(int p_bone_idx, const StringName &p_group) {
emit_signal("profile_updated");
}
-bool SkeletonProfile::is_require(int p_bone_idx) const {
+bool SkeletonProfile::is_required(int p_bone_idx) const {
ERR_FAIL_INDEX_V(p_bone_idx, bones.size(), false);
- return bones[p_bone_idx].require;
+ return bones[p_bone_idx].required;
}
-void SkeletonProfile::set_require(int p_bone_idx, const bool p_require) {
+void SkeletonProfile::set_required(int p_bone_idx, bool p_required) {
if (is_read_only) {
return;
}
ERR_FAIL_INDEX(p_bone_idx, bones.size());
- bones.write[p_bone_idx].require = p_require;
+ bones.write[p_bone_idx].required = p_required;
emit_signal("profile_updated");
}
@@ -432,6 +432,9 @@ void SkeletonProfile::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_group", "bone_idx"), &SkeletonProfile::get_group);
ClassDB::bind_method(D_METHOD("set_group", "bone_idx", "group"), &SkeletonProfile::set_group);
+ ClassDB::bind_method(D_METHOD("is_required", "bone_idx"), &SkeletonProfile::is_required);
+ ClassDB::bind_method(D_METHOD("set_required", "bone_idx", "required"), &SkeletonProfile::set_required);
+
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "root_bone", PROPERTY_HINT_ENUM_SUGGESTION, ""), "set_root_bone", "get_root_bone");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "scale_base_bone", PROPERTY_HINT_ENUM_SUGGESTION, ""), "set_scale_base_bone", "get_scale_base_bone");
@@ -478,14 +481,14 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[1].reference_pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.75, 0);
bones.write[1].handle_offset = Vector2(0.5, 0.5);
bones.write[1].group = "Body";
- bones.write[1].require = true;
+ bones.write[1].required = true;
bones.write[2].bone_name = "Spine";
bones.write[2].bone_parent = "Hips";
bones.write[2].reference_pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0);
bones.write[2].handle_offset = Vector2(0.5, 0.43);
bones.write[2].group = "Body";
- bones.write[2].require = true;
+ bones.write[2].required = true;
bones.write[3].bone_name = "Chest";
bones.write[3].bone_parent = "Spine";
@@ -506,7 +509,7 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[5].reference_pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0);
bones.write[5].handle_offset = Vector2(0.5, 0.23);
bones.write[5].group = "Body";
- bones.write[5].require = false;
+ bones.write[5].required = false;
bones.write[6].bone_name = "Head";
bones.write[6].bone_parent = "Neck";
@@ -514,7 +517,7 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[6].reference_pose = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0);
bones.write[6].handle_offset = Vector2(0.5, 0.18);
bones.write[6].group = "Body";
- bones.write[6].require = true;
+ bones.write[6].required = true;
bones.write[7].bone_name = "LeftEye";
bones.write[7].bone_parent = "Head";
@@ -539,21 +542,21 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[10].reference_pose = Transform3D(0, 1, 0, 0, 0, 1, 1, 0, 0, 0.05, 0.1, 0);
bones.write[10].handle_offset = Vector2(0.55, 0.235);
bones.write[10].group = "Body";
- bones.write[10].require = true;
+ bones.write[10].required = true;
bones.write[11].bone_name = "LeftUpperArm";
bones.write[11].bone_parent = "LeftShoulder";
bones.write[11].reference_pose = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0.05, 0);
bones.write[11].handle_offset = Vector2(0.6, 0.24);
bones.write[11].group = "Body";
- bones.write[11].require = true;
+ bones.write[11].required = true;
bones.write[12].bone_name = "LeftLowerArm";
bones.write[12].bone_parent = "LeftUpperArm";
bones.write[12].reference_pose = Transform3D(0, 0, -1, 0, 1, 0, 1, 0, 0, 0, 0.25, 0);
bones.write[12].handle_offset = Vector2(0.7, 0.24);
bones.write[12].group = "Body";
- bones.write[12].require = true;
+ bones.write[12].required = true;
bones.write[13].bone_name = "LeftHand";
bones.write[13].bone_parent = "LeftLowerArm";
@@ -562,7 +565,7 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[13].reference_pose = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, 0, 0.25, 0);
bones.write[13].handle_offset = Vector2(0.82, 0.235);
bones.write[13].group = "Body";
- bones.write[13].require = true;
+ bones.write[13].required = true;
bones.write[14].bone_name = "LeftThumbMetacarpal";
bones.write[14].bone_parent = "LeftHand";
@@ -659,21 +662,21 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[29].reference_pose = Transform3D(0, -1, 0, 0, 0, 1, -1, 0, 0, -0.05, 0.1, 0);
bones.write[29].handle_offset = Vector2(0.45, 0.235);
bones.write[29].group = "Body";
- bones.write[29].require = true;
+ bones.write[29].required = true;
bones.write[30].bone_name = "RightUpperArm";
bones.write[30].bone_parent = "RightShoulder";
bones.write[30].reference_pose = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0.05, 0);
bones.write[30].handle_offset = Vector2(0.4, 0.24);
bones.write[30].group = "Body";
- bones.write[30].require = true;
+ bones.write[30].required = true;
bones.write[31].bone_name = "RightLowerArm";
bones.write[31].bone_parent = "RightUpperArm";
bones.write[31].reference_pose = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, 0, 0.25, 0);
bones.write[31].handle_offset = Vector2(0.3, 0.24);
bones.write[31].group = "Body";
- bones.write[31].require = true;
+ bones.write[31].required = true;
bones.write[32].bone_name = "RightHand";
bones.write[32].bone_parent = "RightLowerArm";
@@ -682,7 +685,7 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[32].reference_pose = Transform3D(0, 0, -1, 0, 1, 0, 1, 0, 0, 0, 0.25, 0);
bones.write[32].handle_offset = Vector2(0.18, 0.235);
bones.write[32].group = "Body";
- bones.write[32].require = true;
+ bones.write[32].required = true;
bones.write[33].bone_name = "RightThumbMetacarpal";
bones.write[33].bone_parent = "RightHand";
@@ -779,21 +782,21 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[48].reference_pose = Transform3D(-1, 0, 0, 0, -1, 0, 0, 0, 1, 0.1, 0, 0);
bones.write[48].handle_offset = Vector2(0.549, 0.49);
bones.write[48].group = "Body";
- bones.write[48].require = true;
+ bones.write[48].required = true;
bones.write[49].bone_name = "LeftLowerLeg";
bones.write[49].bone_parent = "LeftUpperLeg";
bones.write[49].reference_pose = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0.375, 0);
bones.write[49].handle_offset = Vector2(0.548, 0.683);
bones.write[49].group = "Body";
- bones.write[49].require = true;
+ bones.write[49].required = true;
bones.write[50].bone_name = "LeftFoot";
bones.write[50].bone_parent = "LeftLowerLeg";
bones.write[50].reference_pose = Transform3D(-1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0.375, 0);
bones.write[50].handle_offset = Vector2(0.545, 0.9);
bones.write[50].group = "Body";
- bones.write[50].require = true;
+ bones.write[50].required = true;
bones.write[51].bone_name = "LeftToes";
bones.write[51].bone_parent = "LeftFoot";
@@ -806,21 +809,21 @@ SkeletonProfileHumanoid::SkeletonProfileHumanoid() {
bones.write[52].reference_pose = Transform3D(-1, 0, 0, 0, -1, 0, 0, 0, 1, -0.1, 0, 0);
bones.write[52].handle_offset = Vector2(0.451, 0.49);
bones.write[52].group = "Body";
- bones.write[52].require = true;
+ bones.write[52].required = true;
bones.write[53].bone_name = "RightLowerLeg";
bones.write[53].bone_parent = "RightUpperLeg";
bones.write[53].reference_pose = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0.375, 0);
bones.write[53].handle_offset = Vector2(0.452, 0.683);
bones.write[53].group = "Body";
- bones.write[53].require = true;
+ bones.write[53].required = true;
bones.write[54].bone_name = "RightFoot";
bones.write[54].bone_parent = "RightLowerLeg";
bones.write[54].reference_pose = Transform3D(-1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0.375, 0);
bones.write[54].handle_offset = Vector2(0.455, 0.9);
bones.write[54].group = "Body";
- bones.write[54].require = true;
+ bones.write[54].required = true;
bones.write[55].bone_name = "RightToes";
bones.write[55].bone_parent = "RightFoot";
diff --git a/scene/resources/skeleton_profile.h b/scene/resources/skeleton_profile.h
index 143f495c61b..b5a3bce940b 100644
--- a/scene/resources/skeleton_profile.h
+++ b/scene/resources/skeleton_profile.h
@@ -61,7 +61,7 @@ protected:
Transform3D reference_pose;
Vector2 handle_offset;
StringName group;
- bool require = false;
+ bool required = false;
};
StringName root_bone;
@@ -104,22 +104,22 @@ public:
void set_bone_parent(int p_bone_idx, const StringName &p_bone_parent);
TailDirection get_tail_direction(int p_bone_idx) const;
- void set_tail_direction(int p_bone_idx, const TailDirection p_tail_direction);
+ void set_tail_direction(int p_bone_idx, TailDirection p_tail_direction);
StringName get_bone_tail(int p_bone_idx) const;
void set_bone_tail(int p_bone_idx, const StringName &p_bone_tail);
Transform3D get_reference_pose(int p_bone_idx) const;
- void set_reference_pose(int p_bone_idx, const Transform3D p_reference_pose);
+ void set_reference_pose(int p_bone_idx, const Transform3D &p_reference_pose);
Vector2 get_handle_offset(int p_bone_idx) const;
- void set_handle_offset(int p_bone_idx, const Vector2 p_handle_offset);
+ void set_handle_offset(int p_bone_idx, const Vector2 &p_handle_offset);
StringName get_group(int p_bone_idx) const;
void set_group(int p_bone_idx, const StringName &p_group);
- bool is_require(int p_bone_idx) const;
- void set_require(int p_bone_idx, const bool p_require);
+ bool is_required(int p_bone_idx) const;
+ void set_required(int p_bone_idx, bool p_required);
bool has_bone(const StringName &p_bone_name);