From 051aef3659a536e4465490111263c7cb4483b727 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 13 Oct 2019 22:00:41 +0200 Subject: [PATCH] Added required_skills, and armor type to Itemtemplate. --- data/item_template.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++ data/item_template.h | 25 ++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/data/item_template.cpp b/data/item_template.cpp index 219f23f..912f8ea 100644 --- a/data/item_template.cpp +++ b/data/item_template.cpp @@ -1,5 +1,6 @@ #include "item_template.h" +#include "../entities/data/entity_class_data.h" #include "aura.h" #include "item_instance.h" #include "spell.h" @@ -46,6 +47,13 @@ void ItemTemplate::set_rarity(const ItemEnums::ItemRarity value) { _rarity = value; } +ItemEnums::ArmorType ItemTemplate::get_armor_type() const { + return _armor_type; +} +void ItemTemplate::set_armor_type(const ItemEnums::ArmorType value) { + _armor_type = value; +} + ItemEnums::EquipSlots ItemTemplate::get_equip_slot() const { return _equip_slot; } @@ -60,6 +68,13 @@ void ItemTemplate::set_item_visual(const Ref value) { _item_visual = value; } +Ref ItemTemplate::get_required_character_class() const { + return _required_character_class; +} +void ItemTemplate::set_required_character_class(const Ref value) { + _required_character_class = value; +} + int ItemTemplate::get_price() const { return _price; } @@ -222,6 +237,39 @@ void ItemTemplate::set_auras(const Vector &auras) { } } +//Required Skills +int ItemTemplate::get_num_required_skills() { + return _required_skills.size(); +} + +Ref ItemTemplate::get_required_skill(int index) const { + ERR_FAIL_INDEX_V(index, _required_skills.size(), Ref()); + + return _required_skills.get(index); +} +void ItemTemplate::set_required_skill(int index, Ref aura) { + ERR_FAIL_INDEX(index, _required_skills.size()); + + _required_skills.set(index, aura); +} + +Vector ItemTemplate::get_required_skills() { + Vector r; + for (int i = 0; i < _required_skills.size(); i++) { + r.push_back(_required_skills[i].get_ref_ptr()); + } + return r; +} +void ItemTemplate::set_required_skills(const Vector &skills) { + _required_skills.clear(); + for (int i = 0; i < skills.size(); i++) { + Ref skill = Ref(skills[i]); + + _required_skills.push_back(skill); + } +} + +//use spell Ref ItemTemplate::get_use_spell() const { return _use_spell; } @@ -348,6 +396,7 @@ ItemTemplate::ItemTemplate() { _item_sub_type = ItemEnums::ITEM_SUB_TYPE_NONE; _item_sub_sub_type = ItemEnums::ITEM_SUB_SUB_TYPE_NONE; _rarity = ItemEnums::ITEM_RARITY_NONE; + _armor_type = ItemEnums::ARMOR_TYPE_NONE; _equip_slot = ItemEnums::EQUIP_SLOT_NONE; _price = 0; @@ -368,6 +417,7 @@ ItemTemplate::~ItemTemplate() { _teaches_spells.clear(); _grants_spells.clear(); _auras.clear(); + _required_character_class.unref(); } void ItemTemplate::_validate_property(PropertyInfo &property) const { @@ -409,6 +459,10 @@ void ItemTemplate::_bind_methods() { ClassDB::bind_method(D_METHOD("set_rarity", "count"), &ItemTemplate::set_rarity); ADD_PROPERTY(PropertyInfo(Variant::INT, "rarity", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_RARITY), "set_rarity", "get_rarity"); + ClassDB::bind_method(D_METHOD("get_armor_type"), &ItemTemplate::get_armor_type); + ClassDB::bind_method(D_METHOD("set_armor_type", "value"), &ItemTemplate::set_armor_type); + ADD_PROPERTY(PropertyInfo(Variant::INT, "armor_type", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_ARMOR_TYPE), "set_armor_type", "get_armor_type"); + ClassDB::bind_method(D_METHOD("get_equip_slot"), &ItemTemplate::get_equip_slot); ClassDB::bind_method(D_METHOD("set_equip_slot", "count"), &ItemTemplate::set_equip_slot); ADD_PROPERTY(PropertyInfo(Variant::INT, "equip_slot", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_EQUIP_SLOTS), "set_equip_slot", "get_equip_slot"); @@ -478,6 +532,16 @@ 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"); + //// Required Skills //// + ClassDB::bind_method(D_METHOD("get_num_required_skills"), &ItemTemplate::get_num_required_skills); + + ClassDB::bind_method(D_METHOD("get_required_skill", "index"), &ItemTemplate::get_required_skill); + ClassDB::bind_method(D_METHOD("set_required_skill", "index", "aura"), &ItemTemplate::set_required_skill); + + ClassDB::bind_method(D_METHOD("get_required_skills"), &ItemTemplate::get_required_skills); + ClassDB::bind_method(D_METHOD("set_required_skills", "auras"), &ItemTemplate::set_required_skills); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "required_skills", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_required_skills", "get_required_skills"); + //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); @@ -531,4 +595,6 @@ void ItemTemplate::_bind_methods() { //ClassDB::bind_method(D_METHOD("set_item_stat_modifier", "index", "value"), &ItemTemplate::set_item_stat_modifier); ClassDB::bind_method(D_METHOD("get_animator_weapon_type"), &ItemTemplate::get_animator_weapon_type); + + BIND_CONSTANT(MAX_ITEM_STAT_MOD); } diff --git a/data/item_template.h b/data/item_template.h index 2d47d15..f6c19a8 100644 --- a/data/item_template.h +++ b/data/item_template.h @@ -13,6 +13,7 @@ class ItemInstance; class Aura; class Spell; +class EntityClassData; class ItemTemplate : public Resource { GDCLASS(ItemTemplate, Resource); @@ -37,12 +38,18 @@ public: ItemEnums::ItemRarity get_rarity() const; void set_rarity(const ItemEnums::ItemRarity value); + ItemEnums::ArmorType get_armor_type() const; + void set_armor_type(const ItemEnums::ArmorType value); + ItemEnums::EquipSlots get_equip_slot() const; void set_equip_slot(const ItemEnums::EquipSlots value); Ref get_item_visual() const; void set_item_visual(const Ref value); + Ref get_required_character_class() const; + void set_required_character_class(const Ref value); + int get_price() const; void set_price(const int value); @@ -94,6 +101,15 @@ public: Vector get_auras(); void set_auras(const Vector &auras); + //Required Skills + int get_num_required_skills(); + + Ref get_required_skill(int index) const; + void set_required_skill(int index, Ref skills); + + Vector get_required_skills(); + void set_required_skills(const Vector &grants_spells); + //use spell Ref get_use_spell() const; void set_use_spell(Ref use_spell); @@ -130,6 +146,12 @@ public: ItemTemplate(); ~ItemTemplate(); +public: + struct SkillEntry { + Ref aura; + int level; + }; + protected: static void _bind_methods(); void _validate_property(PropertyInfo &property) const; @@ -145,10 +167,12 @@ private: ItemEnums::ItemType _item_type; ItemEnums::ItemSubtype _item_sub_type; ItemEnums::ItemSubSubtype _item_sub_sub_type; + ItemEnums::ArmorType _armor_type; ItemEnums::EquipSlots _equip_slot; int _price; + Ref _required_character_class; Ref _item_visual; int _stack_size; @@ -164,6 +188,7 @@ private: Vector > _teaches_spells; Vector > _grants_spells; Vector > _auras; + Vector > _required_skills; Ref _use_spell; int _modifier_count;