From f2d35f8b2c7c3fbaeb80ccfc2f39fc96be79efb1 Mon Sep 17 00:00:00 2001 From: Relintai Date: Thu, 18 Jun 2020 20:47:02 +0200 Subject: [PATCH] Bit more work on fixing the crash. Haven't yet found the culprit. Fortunately it's only crashing sometimes. --- entities/entity.cpp | 25 ++++++++----------------- entities/entity.h | 2 +- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/entities/entity.cpp b/entities/entity.cpp index 7935c8d..2e5e0a5 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -180,15 +180,15 @@ void Entity::set_body(Node *body) { _body_3d = Object::cast_to(body); } -void Entity::instance_body() { +void Entity::instance_body(const Ref &data, const int model_index) { if (is_queued_for_deletion()) return; - if (get_body() == NULL && _c_entity_data.is_valid() && _c_entity_data->get_entity_species_data().is_valid() && - _c_entity_data->get_entity_species_data()->get_model_data_count() > _c_model_index && - _c_entity_data->get_entity_species_data()->get_model_data(_c_model_index).is_valid() && - _c_entity_data->get_entity_species_data()->get_model_data(_c_model_index)->get_body().is_valid()) { - Node *node = _c_entity_data->get_entity_species_data()->get_model_data(_c_model_index)->get_body()->instance(); + if (get_body() == NULL && data.is_valid() && data->get_entity_species_data().is_valid() && + data->get_entity_species_data()->get_model_data_count() > model_index && + data->get_entity_species_data()->get_model_data(model_index).is_valid() && + data->get_entity_species_data()->get_model_data(model_index)->get_body().is_valid()) { + Node *node = data->get_entity_species_data()->get_model_data(model_index)->get_body()->instance(); add_child(node); set_body(node); @@ -559,16 +559,7 @@ void Entity::sets_entity_data(Ref value) { //setup(); - if (get_body() == NULL && value.is_valid() && value->get_entity_species_data().is_valid() && - value->get_entity_species_data()->get_model_data_count() > _s_model_index && - value->get_entity_species_data()->get_model_data(_s_model_index).is_valid() && - value->get_entity_species_data()->get_model_data(_s_model_index)->get_body().is_valid()) { - - Node *node = value->get_entity_species_data()->get_model_data(_s_model_index)->get_body()->instance(); - - add_child(node); - set_body(node); - } + instance_body(value, _s_model_index); emit_signal("sentity_data_changed", value); @@ -582,7 +573,7 @@ Ref Entity::getc_entity_data() { void Entity::setc_entity_data(Ref value) { _c_entity_data = value; - call_deferred("instance_body"); + instance_body(value, _c_model_index); emit_signal("centity_data_changed", value); } diff --git a/entities/entity.h b/entities/entity.h index bbb40cc..a77a8e0 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -235,7 +235,7 @@ public: Node2D *get_body_2d(); void set_body(Node *body); - void instance_body(); + void instance_body(const Ref &data, const int model_index); NodePath get_character_skeleton_path(); void set_character_skeleton_path(NodePath value);