mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-02-22 17:18:12 +01:00
implemented serialization for ItemInstance.
This commit is contained in:
parent
f3f019b5cb
commit
f12640dbcc
@ -8,6 +8,12 @@ Ref<ItemTemplate> ItemInstance::get_item_template() const {
|
||||
}
|
||||
void ItemInstance::set_item_template(const Ref<ItemTemplate> value) {
|
||||
_item_template = value;
|
||||
|
||||
_item_template_id = 0;
|
||||
|
||||
if (value.is_valid())
|
||||
_item_template_id = value->get_id();
|
||||
|
||||
}
|
||||
|
||||
Ref<ItemStatModifier> ItemInstance::get_item_stat_modifier(int index) {
|
||||
@ -37,8 +43,56 @@ void ItemInstance::set_stack_size(int value) {
|
||||
_stack_size = value;
|
||||
}
|
||||
|
||||
Dictionary ItemInstance::to_dict() {
|
||||
return call("_to_dict");
|
||||
}
|
||||
void ItemInstance::from_dict(const Dictionary &dict) {
|
||||
call("_from_dict", dict);
|
||||
}
|
||||
|
||||
Dictionary ItemInstance::_to_dict() {
|
||||
Dictionary dict;
|
||||
|
||||
dict["item_id"] = _item_template->get_id();
|
||||
|
||||
dict["stack_size"] = _stack_size;
|
||||
|
||||
Array mods;
|
||||
|
||||
for (int i = 0; i < _modifiers.size(); ++i) {
|
||||
mods.append(_modifiers.get(i)->to_dict());
|
||||
}
|
||||
|
||||
dict["modifiers"] = mods;
|
||||
|
||||
return dict;
|
||||
}
|
||||
void ItemInstance::_from_dict(const Dictionary &dict) {
|
||||
ERR_FAIL_COND(dict.empty());
|
||||
|
||||
_item_template_id = dict.get("item_id", 0);
|
||||
|
||||
if (DataManager::get_instance() != NULL) {
|
||||
_item_template = DataManager::get_instance()->get_item_template(_item_template_id);
|
||||
}
|
||||
|
||||
_stack_size = dict.get("stack_size", 0);
|
||||
|
||||
Array mods = dict.get("modifiers", Array());
|
||||
|
||||
for (int i = 0; i < mods.size(); ++i) {
|
||||
Ref<ItemStatModifier> mod;
|
||||
mod.instance();
|
||||
|
||||
mod->from_dict(mods.get(i));
|
||||
|
||||
_modifiers.push_back(mod);
|
||||
}
|
||||
}
|
||||
|
||||
ItemInstance::ItemInstance() {
|
||||
_stack_size = 1;
|
||||
_item_template_id = 0;
|
||||
}
|
||||
ItemInstance::~ItemInstance() {
|
||||
_modifiers.clear();
|
||||
@ -60,4 +114,14 @@ void ItemInstance::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("remove_item_stat_modifier", "index"), &ItemInstance::remove_item_stat_modifier);
|
||||
ClassDB::bind_method(D_METHOD("clear_item_stat_modifiers"), &ItemInstance::clear_item_stat_modifiers);
|
||||
ClassDB::bind_method(D_METHOD("get_item_stat_modifier_count"), &ItemInstance::get_item_stat_modifier_count);
|
||||
|
||||
//Serialization
|
||||
BIND_VMETHOD(MethodInfo("_from_dict", PropertyInfo(Variant::DICTIONARY, "dict")));
|
||||
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::DICTIONARY, "dict"), "_to_dict"));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("from_dict", "dict"), &ItemInstance::from_dict);
|
||||
ClassDB::bind_method(D_METHOD("to_dict"), &ItemInstance::to_dict);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_from_dict", "dict"), &ItemInstance::_from_dict);
|
||||
ClassDB::bind_method(D_METHOD("_to_dict"), &ItemInstance::_to_dict);
|
||||
}
|
||||
|
@ -8,6 +8,8 @@
|
||||
#include "../entities/stats/stat.h"
|
||||
#include "../item_enums.h"
|
||||
|
||||
#include "data_manager.h"
|
||||
|
||||
class ItemTemplate;
|
||||
|
||||
class ItemInstance : public Reference {
|
||||
@ -27,8 +29,11 @@ public:
|
||||
int get_stack_size();
|
||||
void set_stack_size(int value);
|
||||
|
||||
//to_dict();
|
||||
//from_dict();
|
||||
Dictionary to_dict();
|
||||
void from_dict(const Dictionary &dict);
|
||||
|
||||
virtual Dictionary _to_dict();
|
||||
virtual void _from_dict(const Dictionary &dict);
|
||||
|
||||
ItemInstance();
|
||||
~ItemInstance();
|
||||
@ -38,6 +43,7 @@ protected:
|
||||
|
||||
private:
|
||||
Ref<ItemTemplate> _item_template;
|
||||
int _item_template_id;
|
||||
|
||||
int _stack_size;
|
||||
|
||||
|
@ -34,6 +34,34 @@ void ItemStatModifier::set_percent_mod(float value) {
|
||||
_percent_mod = value;
|
||||
}
|
||||
|
||||
Dictionary ItemStatModifier::to_dict() {
|
||||
return call("_to_dict");
|
||||
}
|
||||
void ItemStatModifier::from_dict(const Dictionary &dict) {
|
||||
call("_from_dict", dict);
|
||||
}
|
||||
|
||||
Dictionary ItemStatModifier::_to_dict() {
|
||||
Dictionary dict;
|
||||
|
||||
dict["stat_id"] = static_cast<int>(_stat_id);
|
||||
|
||||
dict["base_mod"] = _base_mod;
|
||||
dict["bonus_mod"] = _bonus_mod;
|
||||
dict["percent_mod"] = _percent_mod;
|
||||
|
||||
return dict;
|
||||
}
|
||||
void ItemStatModifier::_from_dict(const Dictionary &dict) {
|
||||
ERR_FAIL_COND(dict.empty());
|
||||
|
||||
|
||||
_stat_id = static_cast<Stat::StatId>(static_cast<int>(dict.get("stat_id", 0)));
|
||||
_base_mod = dict.get("base_mod", 0);
|
||||
_bonus_mod = dict.get("bonus_mod", 0);
|
||||
_percent_mod = dict.get("percent_mod", 0);
|
||||
}
|
||||
|
||||
ItemStatModifier::ItemStatModifier() {
|
||||
_stat_id = Stat::STAT_ID_HEALTH;
|
||||
_base_mod = 0;
|
||||
|
@ -20,6 +20,12 @@ public:
|
||||
float get_percent_mod();
|
||||
void set_percent_mod(float value);
|
||||
|
||||
Dictionary to_dict();
|
||||
void from_dict(const Dictionary &dict);
|
||||
|
||||
virtual Dictionary _to_dict();
|
||||
virtual void _from_dict(const Dictionary &dict);
|
||||
|
||||
ItemStatModifier();
|
||||
|
||||
protected:
|
||||
|
Loading…
Reference in New Issue
Block a user