Skip to content

Commit

Permalink
Allow renaming bones and blendshapes
Browse files Browse the repository at this point in the history
Backport "d13568a8d1290713bbdab5a32a99e03d762cefc9" to 3.2
  • Loading branch information
lyuma committed Oct 15, 2020
1 parent 5e4a8ab commit 491dd72
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 0 deletions.
13 changes: 13 additions & 0 deletions scene/3d/skeleton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,18 @@ String Skeleton::get_bone_name(int p_bone) const {

return bones[p_bone].name;
}
void Skeleton::set_bone_name(int p_bone, const String &p_name) {

ERR_FAIL_INDEX(p_bone, bones.size());

for (int i = 0; i < bones.size(); i++) {
if (i != p_bone) {
ERR_FAIL_COND(bones[i].name == p_name);
}
}

bones.write[p_bone].name = p_name;
}

bool Skeleton::is_bone_parent_of(int p_bone, int p_parent_bone_id) const {

Expand Down Expand Up @@ -854,6 +866,7 @@ void Skeleton::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_bone", "name"), &Skeleton::add_bone);
ClassDB::bind_method(D_METHOD("find_bone", "name"), &Skeleton::find_bone);
ClassDB::bind_method(D_METHOD("get_bone_name", "bone_idx"), &Skeleton::get_bone_name);
ClassDB::bind_method(D_METHOD("set_bone_name", "bone_idx", "name"), &Skeleton::set_bone_name);

ClassDB::bind_method(D_METHOD("get_bone_parent", "bone_idx"), &Skeleton::get_bone_parent);
ClassDB::bind_method(D_METHOD("set_bone_parent", "bone_idx", "parent_idx"), &Skeleton::set_bone_parent);
Expand Down
1 change: 1 addition & 0 deletions scene/3d/skeleton.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ class Skeleton : public Spatial {
void add_bone(const String &p_name);
int find_bone(const String &p_name) const;
String get_bone_name(int p_bone) const;
void set_bone_name(int p_bone, const String &p_name);

bool is_bone_parent_of(int p_bone_id, int p_parent_bone_id) const;

Expand Down
18 changes: 18 additions & 0 deletions scene/resources/mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -916,6 +916,23 @@ StringName ArrayMesh::get_blend_shape_name(int p_index) const {
ERR_FAIL_INDEX_V(p_index, blend_shapes.size(), StringName());
return blend_shapes[p_index];
}
void ArrayMesh::set_blend_shape_name(int p_index, const StringName &p_name) {
ERR_FAIL_INDEX(p_index, blend_shapes.size());

StringName name = p_name;
int found = blend_shapes.find(name);
if (found != -1 && found != p_index) {

int count = 2;
do {

name = String(p_name) + " " + itos(count);
count++;
} while (blend_shapes.find(name) != -1);
}

blend_shapes.write[p_index] = name;
}
void ArrayMesh::clear_blend_shapes() {

ERR_FAIL_COND_MSG(surfaces.size(), "Can't set shape key count if surfaces are already created.");
Expand Down Expand Up @@ -1289,6 +1306,7 @@ void ArrayMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_blend_shape", "name"), &ArrayMesh::add_blend_shape);
ClassDB::bind_method(D_METHOD("get_blend_shape_count"), &ArrayMesh::get_blend_shape_count);
ClassDB::bind_method(D_METHOD("get_blend_shape_name", "index"), &ArrayMesh::get_blend_shape_name);
ClassDB::bind_method(D_METHOD("set_blend_shape_name", "index", "name"), &ArrayMesh::set_blend_shape_name);
ClassDB::bind_method(D_METHOD("clear_blend_shapes"), &ArrayMesh::clear_blend_shapes);
ClassDB::bind_method(D_METHOD("set_blend_shape_mode", "mode"), &ArrayMesh::set_blend_shape_mode);
ClassDB::bind_method(D_METHOD("get_blend_shape_mode"), &ArrayMesh::get_blend_shape_mode);
Expand Down
1 change: 1 addition & 0 deletions scene/resources/mesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ class ArrayMesh : public Mesh {
void add_blend_shape(const StringName &p_name);
int get_blend_shape_count() const;
StringName get_blend_shape_name(int p_index) const;
void set_blend_shape_name(int p_index, const StringName &p_name);
void clear_blend_shapes();

void set_blend_shape_mode(BlendShapeMode p_mode);
Expand Down

0 comments on commit 491dd72

Please sign in to comment.