From f337ab57c442ed805077ef29e4fb5710b72f7e2a Mon Sep 17 00:00:00 2001 From: Relintai Date: Fri, 27 Sep 2019 00:49:21 +0200 Subject: [PATCH] Cleaned up ItemInstance, and ESDragAndDrop a bit. Reenabled AISpellActionContainer and fixed android build with it. --- SCsub | 2 +- ai/ai_action_container.cpp | 4 + ai/ai_action_container.h | 1 + ai/ai_spell_action.cpp | 4 + ai/ai_spell_action.h | 1 + ai/ai_spell_action_container.cpp | 4 + ai/ai_spell_action_container.h | 1 + data/item_instance.cpp | 145 ++++------------------------- data/item_instance.h | 44 +-------- data/item_template.cpp | 12 +++ data/item_template.h | 9 +- drag_and_drop/es_drag_and_drop.cpp | 18 +++- drag_and_drop/es_drag_and_drop.h | 7 ++ inventory/bag.cpp | 4 - register_types.cpp | 4 +- 15 files changed, 81 insertions(+), 179 deletions(-) diff --git a/SCsub b/SCsub index f4cd2c7..505a2d2 100644 --- a/SCsub +++ b/SCsub @@ -111,5 +111,5 @@ module_env.add_source_files(env.modules_sources,"loot/loot_data_item.cpp") module_env.add_source_files(env.modules_sources,"ai/ai_action.cpp") module_env.add_source_files(env.modules_sources,"ai/ai_spell_action.cpp") module_env.add_source_files(env.modules_sources,"ai/ai_action_container.cpp") -#module_env.add_source_files(env.modules_sources,"ai/ai_spell_action_container.cpp") +module_env.add_source_files(env.modules_sources,"ai/ai_spell_action_container.cpp") diff --git a/ai/ai_action_container.cpp b/ai/ai_action_container.cpp index b6df0a1..480e633 100644 --- a/ai/ai_action_container.cpp +++ b/ai/ai_action_container.cpp @@ -37,6 +37,10 @@ void AIActionContainer::set_ai_actions(const Vector &ai_actions) { AIActionContainer::AIActionContainer() { } +AIActionContainer::~AIActionContainer() { + _ai_actions.clear(); +} + void AIActionContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("get_num_ai_actions"), &AIActionContainer::get_num_ai_actions); ClassDB::bind_method(D_METHOD("set_num_ai_actions", "value"), &AIActionContainer::set_num_ai_actions); diff --git a/ai/ai_action_container.h b/ai/ai_action_container.h index 713f615..8ab56f0 100644 --- a/ai/ai_action_container.h +++ b/ai/ai_action_container.h @@ -17,6 +17,7 @@ public: void set_ai_actions(const Vector &auras); AIActionContainer(); + ~AIActionContainer(); protected: static void _bind_methods(); diff --git a/ai/ai_spell_action.cpp b/ai/ai_spell_action.cpp index c2a71ca..f49046f 100644 --- a/ai/ai_spell_action.cpp +++ b/ai/ai_spell_action.cpp @@ -56,6 +56,10 @@ AISpellAction::AISpellAction() { _keep_aura_on_self_index = 0; } +AISpellAction::~AISpellAction() { + _spell.unref(); +} + void AISpellAction::_bind_methods() { ClassDB::bind_method(D_METHOD("get_type"), &AISpellAction::get_type); ClassDB::bind_method(D_METHOD("set_type", "value"), &AISpellAction::set_type); diff --git a/ai/ai_spell_action.h b/ai/ai_spell_action.h index 264b2c6..a8ca0e1 100644 --- a/ai/ai_spell_action.h +++ b/ai/ai_spell_action.h @@ -44,6 +44,7 @@ public: void set_keep_aura_on_self_index(const int value); AISpellAction(); + ~AISpellAction(); protected: static void _bind_methods(); diff --git a/ai/ai_spell_action_container.cpp b/ai/ai_spell_action_container.cpp index f47f634..648fd6e 100644 --- a/ai/ai_spell_action_container.cpp +++ b/ai/ai_spell_action_container.cpp @@ -37,6 +37,10 @@ void AISpellActionContainer::set_ai_spell_actions(const Vector &ai_spel AISpellActionContainer::AISpellActionContainer() { } +AISpellActionContainer::~AISpellActionContainer() { + _ai_spell_actions.clear(); +} + void AISpellActionContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("get_num_ai_spell_actions"), &AISpellActionContainer::get_num_ai_spell_actions); ClassDB::bind_method(D_METHOD("set_num_ai_spell_actions", "value"), &AISpellActionContainer::set_num_ai_spell_actions); diff --git a/ai/ai_spell_action_container.h b/ai/ai_spell_action_container.h index 770104e..4b65438 100644 --- a/ai/ai_spell_action_container.h +++ b/ai/ai_spell_action_container.h @@ -18,6 +18,7 @@ public: void set_ai_spell_actions(const Vector &auras); AISpellActionContainer(); + ~AISpellActionContainer(); protected: static void _bind_methods(); diff --git a/data/item_instance.cpp b/data/item_instance.cpp index 8af2913..c68e0a6 100644 --- a/data/item_instance.cpp +++ b/data/item_instance.cpp @@ -1,31 +1,7 @@ #include "item_instance.h" #include "item_template.h" -#include "../inventory/bag.h" -int ItemInstance::get_id() { - return _id; -} - -void ItemInstance::set_id(int value) { - _id = value; -} - -int ItemInstance::get_inventory_position() const { - return _inventory_position; -} -void ItemInstance::set_inventory_position(const int value) { - _inventory_position = value; -} - - -Ref ItemInstance::get_bag() const { - return _bag; -} - -void ItemInstance::set_bag(const Ref bag) { - _bag = bag; -} Ref ItemInstance::get_item_template() const { return _item_template; @@ -35,134 +11,53 @@ void ItemInstance::set_item_template(const Ref value) { } Ref ItemInstance::get_item_stat_modifier(int index) { - return _modifiers[index]; -} -/* -void ItemInstance::set_item_stat_modifier(int index, ItemStatModifier modifier) { - _modifiers[index] = modifier; -}*/ + ERR_FAIL_INDEX_V(index, _modifiers.size(), Ref()); + return _modifiers.get(index); +} +void ItemInstance::add_item_stat_modifier(Ref modifier) { + _modifiers.push_back(modifier); +} +void ItemInstance::remove_item_stat_modifier(int index) { + ERR_FAIL_INDEX(index, _modifiers.size()); + + _modifiers.remove(index); +} +void ItemInstance::clear_item_stat_modifiers() { + _modifiers.clear(); +} int ItemInstance::get_item_stat_modifier_count() { - return _modifier_count; -} - -void ItemInstance::set_item_stat_modifier_count(int value) { - _modifier_count = value; -} - -Stat::StatId ItemInstance::get_item_stat_id(int index) { - return _modifiers[index]->get_stat_id(); -} - -void ItemInstance::set_item_stat_id(int index, Stat::StatId value) { - _modifiers[index]->set_stat_id(value); -} - -float ItemInstance::get_item_base_mod(int index) { - return _modifiers[index]->get_base_mod(); -} - -void ItemInstance::set_item_base_mod(int index, float value) { - _modifiers[index]->set_base_mod(value); -} - -float ItemInstance::get_item_bonus_mod(int index) { - return _modifiers[index]->get_bonus_mod(); -} - -void ItemInstance::set_item_bonus_mod(int index, float value) { - _modifiers[index]->set_bonus_mod(value); -} - -float ItemInstance::get_percent_mod(int index) { - return _modifiers[index]->get_percent_mod(); -} - -void ItemInstance::set_percent_mod(int index, float value) { - _modifiers[index]->set_percent_mod(value); + return _modifiers.size(); } int ItemInstance::get_stack_size() { return _stack_size; } - void ItemInstance::set_stack_size(int value) { _stack_size = value; } ItemInstance::ItemInstance() { - _id = 0; - _stack_size = 1; - - _modifier_count = 0; - - for (int i = 0; i < MAX_ITEM_STAT_MOD; ++i) { - _modifiers[i] = Ref(memnew(ItemStatModifier())); - } } - ItemInstance::~ItemInstance() { -} - -void ItemInstance::_validate_property(PropertyInfo &property) const { - String prop = property.name; - if (prop.begins_with("Modifiers_")) { - int frame = prop.get_slicec('/', 0).get_slicec('_', 1).to_int(); - if (frame >= _modifier_count) { - property.usage = 0; - } - } + _modifiers.clear(); } void ItemInstance::_bind_methods() { - ClassDB::bind_method(D_METHOD("get_id"), &ItemInstance::get_id); - ClassDB::bind_method(D_METHOD("set_id", "count"), &ItemInstance::set_id); - ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id"); - - ClassDB::bind_method(D_METHOD("get_inventory_position"), &ItemInstance::get_inventory_position); - ClassDB::bind_method(D_METHOD("set_inventory_position", "value"), &ItemInstance::set_inventory_position); - ADD_PROPERTY(PropertyInfo(Variant::INT, "inventory_position"), "set_inventory_position", "get_inventory_position"); - - 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); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "item_template", PROPERTY_HINT_RESOURCE_TYPE, "ItemTemplate"), "set_item_template", "get_item_template"); ClassDB::bind_method(D_METHOD("get_stack_size"), &ItemInstance::get_stack_size); ClassDB::bind_method(D_METHOD("set_stack_size", "count"), &ItemInstance::set_stack_size); ADD_PROPERTY(PropertyInfo(Variant::INT, "stack_size"), "set_stack_size", "get_stack_size"); ClassDB::bind_method(D_METHOD("get_item_stat_modifier", "index"), &ItemInstance::get_item_stat_modifier); - //ClassDB::bind_method(D_METHOD("set_item_stat_modifier", "index", "value"), &ItemInstance::set_item_stat_modifier); - - //StatMods Property binds + ClassDB::bind_method(D_METHOD("add_item_stat_modifier", "modifier"), &ItemInstance::add_item_stat_modifier); + 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); - ClassDB::bind_method(D_METHOD("set_item_stat_modifier_count", "count"), &ItemInstance::set_item_stat_modifier_count); - ADD_PROPERTY(PropertyInfo(Variant::INT, "set_item_stat_modifier_count", PROPERTY_HINT_RANGE, "0," + itos(MAX_ITEM_STAT_MOD), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_item_stat_modifier_count", "get_item_stat_modifier_count"); - - ClassDB::bind_method(D_METHOD("get_item_stat_id", "index"), &ItemInstance::get_item_stat_id); - ClassDB::bind_method(D_METHOD("set_item_stat_id", "index", "value"), &ItemInstance::set_item_stat_id); - - ClassDB::bind_method(D_METHOD("get_item_base_mod", "index"), &ItemInstance::get_item_base_mod); - ClassDB::bind_method(D_METHOD("set_item_base_mod", "index", "value"), &ItemInstance::set_item_base_mod); - - ClassDB::bind_method(D_METHOD("get_item_bonus_mod", "index"), &ItemInstance::get_item_bonus_mod); - ClassDB::bind_method(D_METHOD("set_item_bonus_mod", "index", "value"), &ItemInstance::set_item_bonus_mod); - - ClassDB::bind_method(D_METHOD("get_percent_mod", "index"), &ItemInstance::get_percent_mod); - ClassDB::bind_method(D_METHOD("set_percent_mod", "index", "value"), &ItemInstance::set_percent_mod); - - for (int i = 0; i < MAX_ITEM_STAT_MOD; ++i) { - ADD_PROPERTYI(PropertyInfo(Variant::INT, "Modifiers_" + itos(i) + "/stat_id", PROPERTY_HINT_ENUM, Stat::STAT_BINDING_STRING, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_stat_id", "get_item_stat_id", i); - - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/item_base_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_base_mod", "get_item_base_mod", i); - - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/item_bonus_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_bonus_mod", "get_item_bonus_mod", i); - - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/percent_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_percent_mod", "get_percent_mod", i); - } } diff --git a/data/item_instance.h b/data/item_instance.h index 04fe0e1..0282808 100644 --- a/data/item_instance.h +++ b/data/item_instance.h @@ -2,48 +2,27 @@ #define ITEM_INSTANCE_H #include "core/reference.h" -#include "scene/resources/texture.h" +#include "core/vector.h" #include "item_stat_modifier.h" #include "../entities/stats/stat.h" #include "../item_enums.h" -class Bag; class ItemTemplate; class ItemInstance : public Reference { GDCLASS(ItemInstance, Reference); public: - int get_id(); - void set_id(int value); - - int get_inventory_position() const; - void set_inventory_position(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); Ref get_item_stat_modifier(int index); - //void set_item_stat_modifier(int index, ItemStatModifier modifier); + void add_item_stat_modifier(Ref modifier); + void remove_item_stat_modifier(int index); + void clear_item_stat_modifiers(); int get_item_stat_modifier_count(); - void set_item_stat_modifier_count(int value); - - Stat::StatId get_item_stat_id(int index); - void set_item_stat_id(int index, Stat::StatId value); - - float get_item_base_mod(int index); - void set_item_base_mod(int index, float value); - - float get_item_bonus_mod(int index); - void set_item_bonus_mod(int index, float value); - - float get_percent_mod(int index); - void set_percent_mod(int index, float value); int get_stack_size(); void set_stack_size(int value); @@ -56,26 +35,13 @@ public: protected: static void _bind_methods(); - void _validate_property(PropertyInfo &property) const; private: - enum { - MAX_ITEM_STAT_MOD = 6, - }; - - int _id; - - int _inventory_position; - - int _item_tamplate_id; Ref _item_template; int _stack_size; - - Ref _bag; - int _modifier_count; - Ref _modifiers[MAX_ITEM_STAT_MOD]; + Vector > _modifiers; }; #endif diff --git a/data/item_template.cpp b/data/item_template.cpp index d270025..07245ca 100644 --- a/data/item_template.cpp +++ b/data/item_template.cpp @@ -216,6 +216,13 @@ void ItemTemplate::set_auras(const Vector &auras) { } } +Ref ItemTemplate::get_use_spell() const { + return _use_spell; +} +void ItemTemplate::set_use_spell(Ref use_spell) { + _use_spell = use_spell; +} + int ItemTemplate::get_item_stat_modifier_count() const { return _modifier_count; } @@ -464,6 +471,11 @@ void ItemTemplate::_bind_methods() { ClassDB::bind_method(D_METHOD("set_auras", "auras"), &ItemTemplate::set_auras); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "auras", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_auras", "get_auras"); + //Use spell + ClassDB::bind_method(D_METHOD("get_use_spell"), &ItemTemplate::get_use_spell); + ClassDB::bind_method(D_METHOD("set_use_spell", "size"), &ItemTemplate::set_use_spell); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "use_spell", PROPERTY_HINT_RESOURCE_TYPE, "Spell"), "set_use_spell", "get_use_spell"); + //StatMods Property binds ADD_GROUP("Item Stat Modifiers", "item_stat_modifier"); ClassDB::bind_method(D_METHOD("get_item_stat_modifier_count"), &ItemTemplate::get_item_stat_modifier_count); diff --git a/data/item_template.h b/data/item_template.h index 8ed8fd7..72bc565 100644 --- a/data/item_template.h +++ b/data/item_template.h @@ -92,7 +92,11 @@ public: Vector get_auras(); void set_auras(const Vector &auras); + //use spell + Ref get_use_spell() const; + void set_use_spell(Ref use_spell); + //Stat mods int get_item_stat_modifier_count() const; void set_item_stat_modifier_count(const int value); @@ -154,13 +158,10 @@ private: int _bag_size; - //Ref *_spell; - //Ref *_auras; - Vector > _teaches_spells; Vector > _grants_spells; Vector > _auras; - + Ref _use_spell; int _modifier_count; Ref _modifiers[MAX_ITEM_STAT_MOD]; diff --git a/drag_and_drop/es_drag_and_drop.cpp b/drag_and_drop/es_drag_and_drop.cpp index 2413025..8cfe9e1 100644 --- a/drag_and_drop/es_drag_and_drop.cpp +++ b/drag_and_drop/es_drag_and_drop.cpp @@ -1,11 +1,17 @@ #include "es_drag_and_drop.h" -const String ESDragAndDrop::BINDING_STRING_ES_DRAG_AND_DROP_TYPE = "None, Spell, Item"; +const String ESDragAndDrop::BINDING_STRING_ES_DRAG_AND_DROP_TYPE = "None,Spell,Item,Inventory Item"; + +Node *ESDragAndDrop::get_origin() const { + return _origin; +} +void ESDragAndDrop::set_origin(Node *origin) { + _origin = origin; +} ESDragAndDrop::ESDragAndDropType ESDragAndDrop::get_type() { return _type; } - void ESDragAndDrop::set_type(ESDragAndDrop::ESDragAndDropType type) { _type = type; } @@ -13,7 +19,6 @@ void ESDragAndDrop::set_type(ESDragAndDrop::ESDragAndDropType type) { int ESDragAndDrop::get_item_id() { return _item_id; } - void ESDragAndDrop::set_item_id(int item_id) { _item_id = item_id; } @@ -21,9 +26,14 @@ void ESDragAndDrop::set_item_id(int item_id) { ESDragAndDrop::ESDragAndDrop() { _item_id = 0; _type = ES_DRAG_AND_DROP_TYPE_NONE; + _origin = NULL; } void ESDragAndDrop::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_origin"), &ESDragAndDrop::get_origin); + ClassDB::bind_method(D_METHOD("set_origin", "id"), &ESDragAndDrop::set_origin); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "origin", PROPERTY_HINT_RESOURCE_TYPE, "Node"), "set_origin", "get_origin"); + ClassDB::bind_method(D_METHOD("get_type"), &ESDragAndDrop::get_type); ClassDB::bind_method(D_METHOD("set_type", "type"), &ESDragAndDrop::set_type); ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, BINDING_STRING_ES_DRAG_AND_DROP_TYPE), "set_type", "get_type"); @@ -35,5 +45,5 @@ void ESDragAndDrop::_bind_methods() { BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_NONE); BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_SPELL); BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_ITEM); + BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM); } - diff --git a/drag_and_drop/es_drag_and_drop.h b/drag_and_drop/es_drag_and_drop.h index db5028c..0397d01 100644 --- a/drag_and_drop/es_drag_and_drop.h +++ b/drag_and_drop/es_drag_and_drop.h @@ -3,6 +3,7 @@ #include "core/reference.h" #include "core/ustring.h" +#include "scene/main/node.h" class ESDragAndDrop : public Reference { GDCLASS(ESDragAndDrop, Reference); @@ -14,10 +15,15 @@ public: ES_DRAG_AND_DROP_TYPE_NONE = 0, ES_DRAG_AND_DROP_TYPE_SPELL = 1, ES_DRAG_AND_DROP_TYPE_ITEM = 2, + ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM = 3, }; + Node *get_origin() const; + void set_origin(Node *owner); + ESDragAndDropType get_type(); void set_type(ESDragAndDropType type); + int get_item_id(); void set_item_id(int item_id); @@ -27,6 +33,7 @@ protected: static void _bind_methods(); private: + Node *_origin; ESDragAndDropType _type; int _item_id; }; diff --git a/inventory/bag.cpp b/inventory/bag.cpp index 65e5e59..5aaa9c0 100644 --- a/inventory/bag.cpp +++ b/inventory/bag.cpp @@ -48,8 +48,6 @@ bool Bag::add_item(Ref item) { } } - item->set_bag(Ref(this)); - for (int i = 0; i < _items.size(); ++i) { Ref ii = _items.get(i); @@ -99,8 +97,6 @@ Ref Bag::remove_item(const int index) { if (!ii.is_valid()) return ii; - ii->set_bag(Ref()); - _items.set(index, Ref()); emit_signal("item_removed", Ref(this), ii, index); diff --git a/register_types.cpp b/register_types.cpp index 2050ff9..36184a7 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -101,7 +101,7 @@ #include "ai/ai_action.h" #include "ai/ai_spell_action.h" #include "ai/ai_action_container.h" -//#include "ai/ai_spell_action_container.h" +#include "ai/ai_spell_action_container.h" #ifdef TOOLS_ENABLED #include "editor/editor_plugin.h" @@ -223,7 +223,7 @@ void register_entity_spell_system_types() { ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); - // ClassDB::register_class(); + ClassDB::register_class(); //meshes ClassDB::register_class();