diff --git a/data/item_instance.cpp b/data/item_instance.cpp index 37a225c..e2a6ec3 100644 --- a/data/item_instance.cpp +++ b/data/item_instance.cpp @@ -1,6 +1,7 @@ #include "item_instance.h" #include "item_template.h" +#include "../inventory/bag.h" int ItemInstance::get_id() { return _id; @@ -24,6 +25,23 @@ void ItemInstance::set_inventory_position_y(const int value) { _inventory_position_y = value; } +Ref ItemInstance::get_bag() const { + if (_bag == NULL) { + return Ref(NULL); + } + + return *_bag; +} + +void ItemInstance::set_bag(const Ref bag) { + if (_bag == NULL) { + _bag = memnew(Ref(NULL)); + } else { + _bag->unref(); + (*_bag) = bag; + } +} + Ref ItemInstance::get_item_template() const { return _item_template; } @@ -90,8 +108,7 @@ void ItemInstance::set_count(int value) { ItemInstance::ItemInstance() { _id = 0; - _s_bag = NULL; - _c_bag = NULL; + _bag = NULL; _count = 0; @@ -103,6 +120,11 @@ ItemInstance::ItemInstance() { } ItemInstance::~ItemInstance() { + if (_bag != NULL) { + _bag->unref(); + + memdelete(_bag); + } } void ItemInstance::_validate_property(PropertyInfo &property) const { @@ -130,6 +152,9 @@ void ItemInstance::_bind_methods() { ClassDB::bind_method(D_METHOD("set_inventory_position_y", "value"), &ItemInstance::set_inventory_position_y); ADD_PROPERTY(PropertyInfo(Variant::INT, "inventory_position_y"), "set_inventory_position_y", "get_inventory_position_y"); + ClassDB::bind_method(D_METHOD("get_bag"), &ItemInstance::get_bag); + ClassDB::bind_method(D_METHOD("set_bag", "bag"), &ItemInstance::set_bag); + ClassDB::bind_method(D_METHOD("get_item_template"), &ItemInstance::get_item_template); ClassDB::bind_method(D_METHOD("set_item_template", "value"), &ItemInstance::set_item_template); diff --git a/data/item_instance.h b/data/item_instance.h index 6430116..386486b 100644 --- a/data/item_instance.h +++ b/data/item_instance.h @@ -24,6 +24,9 @@ public: int get_inventory_position_y() const; void set_inventory_position_y(const int value); + Ref get_bag() const; + void set_bag(const Ref bag); + Ref get_item_template() const; void set_item_template(const Ref value); @@ -73,8 +76,7 @@ private: int _count; - Ref *_s_bag; - Ref *_c_bag; + Ref *_bag; int _modifier_count; Ref _modifiers[MAX_ITEM_STAT_MOD]; diff --git a/data/item_template.cpp b/data/item_template.cpp index 04d2b2c..f88e478 100644 --- a/data/item_template.cpp +++ b/data/item_template.cpp @@ -322,7 +322,7 @@ void ItemTemplate::_bind_methods() { ClassDB::bind_method(D_METHOD("get_rarity"), &ItemTemplate::get_rarity); ClassDB::bind_method(D_METHOD("set_rarity", "count"), &ItemTemplate::set_rarity); - ADD_PROPERTY(PropertyInfo(Variant::INT, "rarity", PROPERTY_HINT_FLAGS, ItemEnums::BINDING_STRING_RARITY), "set_rarity", "get_rarity"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "rarity", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_RARITY), "set_rarity", "get_rarity"); ClassDB::bind_method(D_METHOD("get_inventory_size_x"), &ItemTemplate::get_inventory_size_x); ClassDB::bind_method(D_METHOD("set_inventory_size_x", "value"), &ItemTemplate::set_inventory_size_x);