diff --git a/skeleton/character_skeleton_3d.cpp b/skeleton/character_skeleton_3d.cpp index 0de2c30..593c9d8 100644 --- a/skeleton/character_skeleton_3d.cpp +++ b/skeleton/character_skeleton_3d.cpp @@ -34,7 +34,10 @@ int CharacterSkeleton3D::get_entity_type() const { void CharacterSkeleton3D::set_entity_type(const int value) { _entity_type = value; - _attach_point_nodes.resize(ESS::get_singleton()->skeletons_bone_attachment_index_get(_entity_type).get_slice_count(",")); + int bones_size = ESS::get_singleton()->skeletons_bones_index_get(_entity_type).get_slice_count(","); + int attachment_size = ESS::get_singleton()->skeletons_bone_attachment_index_get(_entity_type).get_slice_count(","); + _attach_point_nodes.resize(attachment_size); + _entries.resize(bones_size); } int CharacterSkeleton3D::get_model_index() { @@ -190,7 +193,7 @@ void CharacterSkeleton3D::remove_model_visual(Ref vis) { if (index == -1) return; - for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) { + for (int i = 0; i < _entries.size(); ++i) { Ref e = vis->get_visual_entry(i); if (e.is_valid()) @@ -224,8 +227,8 @@ int CharacterSkeleton3D::get_model_visual_count() { void CharacterSkeleton3D::clear_model_visuals() { _model_visuals.clear(); - for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) { - _entries[i].clear(); + for (int i = 0; i < _entries.size(); ++i) { + _entries.write[i].clear(); } _model_dirty = true; @@ -238,7 +241,7 @@ void CharacterSkeleton3D::add_model_visual_entry(Ref vis, Refget_bone(); - Vector > &entries = _entries[target_bone_idx]; + Vector > &entries = _entries.write[target_bone_idx]; for (int i = 0; i < entries.size(); ++i) { Ref e = entries.get(i); @@ -266,7 +269,7 @@ void CharacterSkeleton3D::remove_model_visual_entry(Ref vis, Refget_bone(); - Vector > &entries = _entries[target_bone_idx]; + Vector > &entries = _entries.write[target_bone_idx]; for (int i = 0; i < entries.size(); ++i) { Ref e = entries.get(i); @@ -287,20 +290,20 @@ void CharacterSkeleton3D::remove_model_visual_entry(Ref vis, Ref CharacterSkeleton3D::get_model_entry(const int bone_index, const int index) { - ERR_FAIL_INDEX_V(bone_index, EntityEnums::SKELETON_POINTS_MAX, Ref()); + ERR_FAIL_INDEX_V(bone_index, _entries.size(), Ref()); ERR_FAIL_INDEX_V(index, _entries[bone_index].size(), Ref()); return _entries[bone_index].get(index); } int CharacterSkeleton3D::get_model_entry_count(const int bone_index) { - ERR_FAIL_INDEX_V(bone_index, EntityEnums::SKELETON_POINTS_MAX, 0); + ERR_FAIL_INDEX_V(bone_index, _entries.size(), 0); return _entries[bone_index].size(); } void CharacterSkeleton3D::sort_layers() { - for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) { - Vector > &entries = _entries[i]; + for (int i = 0; i < _entries.size(); ++i) { + Vector > &entries = _entries.write[i]; entries.sort_custom<_ModelEntryComparator>(); } @@ -421,10 +424,12 @@ CharacterSkeleton3D::CharacterSkeleton3D() { CharacterSkeleton3D::~CharacterSkeleton3D() { _attach_point_nodes.clear(); - for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) { - _entries[i].clear(); + for (int i = 0; i < _entries.size(); ++i) { + _entries.write[i].clear(); } + _entries.clear(); + _model_visuals.clear(); } diff --git a/skeleton/character_skeleton_3d.h b/skeleton/character_skeleton_3d.h index e4a60df..9f9824a 100644 --- a/skeleton/character_skeleton_3d.h +++ b/skeleton/character_skeleton_3d.h @@ -152,7 +152,7 @@ private: bool _model_dirty; Vector > _model_visuals; - Vector > _entries[EntityEnums::SKELETON_POINTS_MAX]; + Vector > > _entries; }; #endif