|
@@ -265,11 +265,31 @@ void Skeleton3D::_update_process_order() {
|
|
|
|
|
|
bones_backup.resize(bones.size());
|
|
|
|
|
|
+ concatenated_bone_names = StringName();
|
|
|
+
|
|
|
process_order_dirty = false;
|
|
|
|
|
|
emit_signal("bone_list_changed");
|
|
|
}
|
|
|
|
|
|
+void Skeleton3D::_update_bone_names() const {
|
|
|
+ String names;
|
|
|
+ for (int i = 0; i < bones.size(); i++) {
|
|
|
+ if (i > 0) {
|
|
|
+ names += ",";
|
|
|
+ }
|
|
|
+ names += bones[i].name;
|
|
|
+ }
|
|
|
+ concatenated_bone_names = StringName(names);
|
|
|
+}
|
|
|
+
|
|
|
+StringName Skeleton3D::get_concatenated_bone_names() const {
|
|
|
+ if (concatenated_bone_names == StringName()) {
|
|
|
+ _update_bone_names();
|
|
|
+ }
|
|
|
+ return concatenated_bone_names;
|
|
|
+}
|
|
|
+
|
|
|
#ifndef DISABLE_DEPRECATED
|
|
|
void Skeleton3D::setup_simulator() {
|
|
|
if (simulator && simulator->get_parent() == this) {
|
|
@@ -983,6 +1003,8 @@ void Skeleton3D::_bind_methods() {
|
|
|
ClassDB::bind_method(D_METHOD("get_bone_name", "bone_idx"), &Skeleton3D::get_bone_name);
|
|
|
ClassDB::bind_method(D_METHOD("set_bone_name", "bone_idx", "name"), &Skeleton3D::set_bone_name);
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_concatenated_bone_names"), &Skeleton3D::get_concatenated_bone_names);
|
|
|
+
|
|
|
ClassDB::bind_method(D_METHOD("get_bone_parent", "bone_idx"), &Skeleton3D::get_bone_parent);
|
|
|
ClassDB::bind_method(D_METHOD("set_bone_parent", "bone_idx", "parent_idx"), &Skeleton3D::set_bone_parent);
|
|
|
|