Added required_skills, and armor type to Itemtemplate.

This commit is contained in:
Relintai 2019-10-13 22:00:41 +02:00
parent 3f586d46d2
commit 051aef3659
2 changed files with 91 additions and 0 deletions

View File

@ -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<ItemVisual> value) {
_item_visual = value;
}
Ref<EntityClassData> ItemTemplate::get_required_character_class() const {
return _required_character_class;
}
void ItemTemplate::set_required_character_class(const Ref<EntityClassData> value) {
_required_character_class = value;
}
int ItemTemplate::get_price() const {
return _price;
}
@ -222,6 +237,39 @@ void ItemTemplate::set_auras(const Vector<Variant> &auras) {
}
}
//Required Skills
int ItemTemplate::get_num_required_skills() {
return _required_skills.size();
}
Ref<Aura> ItemTemplate::get_required_skill(int index) const {
ERR_FAIL_INDEX_V(index, _required_skills.size(), Ref<Aura>());
return _required_skills.get(index);
}
void ItemTemplate::set_required_skill(int index, Ref<Aura> aura) {
ERR_FAIL_INDEX(index, _required_skills.size());
_required_skills.set(index, aura);
}
Vector<Variant> ItemTemplate::get_required_skills() {
Vector<Variant> 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<Variant> &skills) {
_required_skills.clear();
for (int i = 0; i < skills.size(); i++) {
Ref<Aura> skill = Ref<Aura>(skills[i]);
_required_skills.push_back(skill);
}
}
//use spell
Ref<Spell> 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);
}

View File

@ -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<ItemVisual> get_item_visual() const;
void set_item_visual(const Ref<ItemVisual> value);
Ref<EntityClassData> get_required_character_class() const;
void set_required_character_class(const Ref<EntityClassData> value);
int get_price() const;
void set_price(const int value);
@ -94,6 +101,15 @@ public:
Vector<Variant> get_auras();
void set_auras(const Vector<Variant> &auras);
//Required Skills
int get_num_required_skills();
Ref<Aura> get_required_skill(int index) const;
void set_required_skill(int index, Ref<Aura> skills);
Vector<Variant> get_required_skills();
void set_required_skills(const Vector<Variant> &grants_spells);
//use spell
Ref<Spell> get_use_spell() const;
void set_use_spell(Ref<Spell> use_spell);
@ -130,6 +146,12 @@ public:
ItemTemplate();
~ItemTemplate();
public:
struct SkillEntry {
Ref<Aura> 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<EntityClassData> _required_character_class;
Ref<ItemVisual> _item_visual;
int _stack_size;
@ -164,6 +188,7 @@ private:
Vector<Ref<Spell> > _teaches_spells;
Vector<Ref<Spell> > _grants_spells;
Vector<Ref<Aura> > _auras;
Vector<Ref<Aura> > _required_skills;
Ref<Spell> _use_spell;
int _modifier_count;