mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-04-19 21:33:15 +02:00
Fixed some deserialization <-> setup related issues.
This commit is contained in:
parent
885504c864
commit
3f586d46d2
@ -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() {
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "equipment_data_entry.h"
|
||||
|
||||
#include "item_instance.h"
|
||||
|
||||
|
||||
Ref<ItemInstance> EquipmentDataEntry::get_item() {
|
||||
if (has_method("_get_item")) {
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
#include "core/resource.h"
|
||||
|
||||
#include "item_instance.h"
|
||||
|
||||
class ItemInstance;
|
||||
|
||||
class EquipmentDataEntry : public Resource {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -676,6 +676,7 @@ protected:
|
||||
|
||||
private:
|
||||
const float SAVE_BASE_SECONDS = 10.0;
|
||||
bool _deserialized;
|
||||
|
||||
//// Paths ////
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user