Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Animation] Expose SkeletonProfile.set/is_required #89970

Merged
merged 1 commit into from
Apr 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions doc/classes/SkeletonProfile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
</description>
</method>
<method name="is_required" qualifiers="const">
<return type="bool" />
<param index="0" name="bone_idx" type="int" />
<description>
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.
</description>
</method>
<method name="set_bone_name">
<return type="void" />
<param index="0" name="bone_idx" type="int" />
Expand Down Expand Up @@ -141,6 +149,14 @@
Sets the reference pose transform for bone [param bone_idx].
</description>
</method>
<method name="set_required">
<return type="void" />
<param index="0" name="bone_idx" type="int" />
<param index="1" name="required" type="bool" />
<description>
Sets the required status for bone [param bone_idx] to [param required].
</description>
</method>
<method name="set_tail_direction">
<return type="void" />
<param index="0" name="bone_idx" type="int" />
Expand Down
2 changes: 1 addition & 1 deletion editor/plugins/bone_map_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
57 changes: 30 additions & 27 deletions scene/resources/skeleton_profile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand All @@ -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");
}

Expand Down Expand Up @@ -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");

Expand Down Expand Up @@ -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";
Expand All @@ -506,15 +509,15 @@ 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";
bones.write[6].tail_direction = TAIL_DIRECTION_END;
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";
Expand All @@ -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";
Expand All @@ -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";
Expand Down Expand Up @@ -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";
Expand All @@ -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";
Expand Down Expand Up @@ -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";
Expand All @@ -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";
Expand Down
12 changes: 6 additions & 6 deletions scene/resources/skeleton_profile.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class SkeletonProfile : public Resource {
Transform3D reference_pose;
Vector2 handle_offset;
StringName group;
bool require = false;
bool required = false;
};

StringName root_bone;
Expand Down Expand Up @@ -104,22 +104,22 @@ class SkeletonProfile : public Resource {
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);

Expand Down
Loading