Fixed some deserialization <-> setup related issues.

This commit is contained in:
Relintai 2019-10-13 20:05:03 +02:00
parent 885504c864
commit 3f586d46d2
8 changed files with 59 additions and 18 deletions

View File

@ -11,6 +11,17 @@ void EquipmentData::set_slot(int index, Ref<EquipmentDataEntry> entry) {
_entries[index] = entry;
}
Ref<ItemInstance> EquipmentData::get_item(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<ItemInstance>());
Ref<EquipmentDataEntry> ede = _entries[index];
if (!ede.is_valid())
return Ref<ItemInstance>();
return ede->get_item();
}
EquipmentData::EquipmentData() {
}

View File

@ -13,6 +13,8 @@ public:
Ref<EquipmentDataEntry> get_slot(int index);
void set_slot(int index, Ref<EquipmentDataEntry> entry);
Ref<ItemInstance> get_item(int index);
EquipmentData();
~EquipmentData();

View File

@ -1,6 +1,6 @@
#include "equipment_data_entry.h"
#include "item_instance.h"
Ref<ItemInstance> EquipmentDataEntry::get_item() {
if (has_method("_get_item")) {

View File

@ -3,6 +3,8 @@
#include "core/resource.h"
#include "item_instance.h"
class ItemInstance;
class EquipmentDataEntry : public Resource {

View File

@ -2,8 +2,8 @@
#include "../../ai/ai_action.h"
#include "../../data/aura.h"
#include "../../data/spell.h"
#include "../../data/craft_recipe.h"
#include "../../data/spell.h"
#include "../../infos/spell_cast_info.h"
#include "../entity.h"
#include "character_spec.h"
@ -80,7 +80,6 @@ void EntityData::set_bag_size(int value) {
_bag_size = value;
}
Ref<EntityClassData> EntityData::get_entity_class_data() {
return _entity_class_data;
}
@ -88,6 +87,13 @@ void EntityData::set_entity_class_data(Ref<EntityClassData> data) {
_entity_class_data = data;
}
Ref<EquipmentData> EntityData::get_equipment_data() {
return _equipment_data;
}
void EntityData::set_equipment_data(Ref<EquipmentData> data) {
_equipment_data = data;
}
Ref<LootDataBase> EntityData::get_loot_db() const {
return _lootdb;
}
@ -149,7 +155,6 @@ void EntityData::set_craft_recipes(const Vector<Variant> &craft_datas) {
}
}
//void EntityData::_setup_resources(Entity *entity) {
//}
@ -798,14 +803,14 @@ void EntityData::con_level_up_bind(Node *entity, int value) {
//Equipment
void EntityData::son_equip_success(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::son_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->son_equip_success(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_son_equip_success"))
call("_son_equip_success", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::son_equip_success_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::son_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
Entity *e = Object::cast_to<Entity>(entity);
@ -815,14 +820,14 @@ void EntityData::son_equip_success_bind(Node* entity, ItemEnums::EquipSlots equi
son_equip_success(e, equip_slot, item, old_item, bag_slot);
}
void EntityData::son_equip_fail(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::son_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->son_equip_fail(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_son_equip_fail"))
call("_son_equip_fail", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::son_equip_fail_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::son_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
Entity *e = Object::cast_to<Entity>(entity);
@ -832,14 +837,14 @@ void EntityData::son_equip_fail_bind(Node* entity, ItemEnums::EquipSlots equip_s
son_equip_fail(e, equip_slot, item, old_item, bag_slot);
}
void EntityData::con_equip_success(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::con_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->con_equip_success(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_con_equip_success"))
call("_con_equip_success", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::con_equip_success_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::con_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
Entity *e = Object::cast_to<Entity>(entity);
@ -849,14 +854,14 @@ void EntityData::con_equip_success_bind(Node* entity, ItemEnums::EquipSlots equi
con_equip_success(e, equip_slot, item, old_item, bag_slot);
}
void EntityData::con_equip_fail(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::con_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->con_equip_fail(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_con_equip_fail"))
call("_con_equip_fail", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::con_equip_fail_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::con_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
Entity *e = Object::cast_to<Entity>(entity);
@ -889,7 +894,7 @@ void EntityData::sai_regenerate(Entity *entity) {
if (has_method("_sai_regenerate"))
call("_sai_regenerate", entity);
else if(_entity_class_data.is_valid())
else if (_entity_class_data.is_valid())
_entity_class_data->sai_regenerate(entity);
}
void EntityData::sai_attack(Entity *entity) {
@ -897,7 +902,7 @@ void EntityData::sai_attack(Entity *entity) {
if (has_method("_sai_attack"))
call("_sai_attack", entity);
else if (_entity_class_data.is_valid())
else if (_entity_class_data.is_valid())
_entity_class_data->sai_attack(entity);
}

View File

@ -21,6 +21,8 @@
#include "entity_class_data.h"
#include "item_container_data.h"
#include "../../data/equipment_data.h"
class Aura;
class Spell;
class Entity;
@ -68,6 +70,9 @@ public:
Ref<EntityClassData> get_entity_class_data();
void set_entity_class_data(Ref<EntityClassData> data);
Ref<EquipmentData> get_equipment_data();
void set_equipment_data(Ref<EquipmentData> data);
Ref<LootDataBase> get_loot_db() const;
void set_loot_db(const Ref<LootDataBase> data);
@ -241,6 +246,7 @@ private:
int _bag_size;
Ref<EntityClassData> _entity_class_data;
Ref<EquipmentData> _equipment_data;
Ref<LootDataBase> _lootdb;
Ref<VendorItemData> _vendor_item_data;

View File

@ -246,7 +246,8 @@ void Entity::sets_entity_data(Ref<EntityData> value) {
}
void Entity::setup() {
_setup();
if (_deserialized)
return;
if (has_method("_setup")) {
call_multilevel("_setup");
@ -283,6 +284,17 @@ void Entity::_setup() {
for (int i = 0; i < _s_entity_data->get_num_craft_recipes(); ++i) {
adds_craft_recipe(_s_entity_data->get_craft_recipe(i));
}
if (_s_entity_data->get_equipment_data().is_valid()) {
Ref<EquipmentData> eqd = _s_entity_data->get_equipment_data();
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
Ref<ItemInstance> ii = eqd->get_item(i);
if (ii.is_valid())
_s_equipment[i] = ii;
}
}
}
if (!Engine::get_singleton()->is_editor_hint())
@ -295,6 +307,8 @@ Dictionary Entity::to_dict() {
void Entity::from_dict(const Dictionary &dict) {
call("_from_dict", dict);
_deserialized = true;
emit_signal("deserialized", this);
}
@ -722,6 +736,8 @@ void Entity::_from_dict(const Dictionary &dict) {
}
Entity::Entity() {
_deserialized = false;
_s_guid = 0;
_c_guid = 0;
@ -1328,8 +1344,6 @@ void Entity::sequip(ItemEnums::EquipSlots equip_slot, int bag_slot) {
call("_sequip", equip_slot, bag_slot);
}
void Entity::_sequip(ItemEnums::EquipSlots equip_slot, int bag_slot) {
}
void Entity::cequip_success(ItemEnums::EquipSlots equip_slot, int bag_slot) {
ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
@ -4338,7 +4352,7 @@ void Entity::_bind_methods() {
ADD_SIGNAL(MethodInfo("onc_open_vendor_winow_request"));
ClassDB::bind_method(D_METHOD("setup"), &Entity::setup);
//ClassDB::bind_method(D_METHOD("_setup"), &Entity::_setup);
ClassDB::bind_method(D_METHOD("_setup"), &Entity::_setup);
//binds
ClassDB::bind_method(D_METHOD("sdie"), &Entity::sdie);

View File

@ -676,6 +676,7 @@ protected:
private:
const float SAVE_BASE_SECONDS = 10.0;
bool _deserialized;
//// Paths ////