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 "item_template.h"
#include "../entities/data/entity_class_data.h"
#include "aura.h" #include "aura.h"
#include "item_instance.h" #include "item_instance.h"
#include "spell.h" #include "spell.h"
@ -46,6 +47,13 @@ void ItemTemplate::set_rarity(const ItemEnums::ItemRarity value) {
_rarity = 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 { ItemEnums::EquipSlots ItemTemplate::get_equip_slot() const {
return _equip_slot; return _equip_slot;
} }
@ -60,6 +68,13 @@ void ItemTemplate::set_item_visual(const Ref<ItemVisual> value) {
_item_visual = 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 { int ItemTemplate::get_price() const {
return _price; 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 { Ref<Spell> ItemTemplate::get_use_spell() const {
return _use_spell; return _use_spell;
} }
@ -348,6 +396,7 @@ ItemTemplate::ItemTemplate() {
_item_sub_type = ItemEnums::ITEM_SUB_TYPE_NONE; _item_sub_type = ItemEnums::ITEM_SUB_TYPE_NONE;
_item_sub_sub_type = ItemEnums::ITEM_SUB_SUB_TYPE_NONE; _item_sub_sub_type = ItemEnums::ITEM_SUB_SUB_TYPE_NONE;
_rarity = ItemEnums::ITEM_RARITY_NONE; _rarity = ItemEnums::ITEM_RARITY_NONE;
_armor_type = ItemEnums::ARMOR_TYPE_NONE;
_equip_slot = ItemEnums::EQUIP_SLOT_NONE; _equip_slot = ItemEnums::EQUIP_SLOT_NONE;
_price = 0; _price = 0;
@ -368,6 +417,7 @@ ItemTemplate::~ItemTemplate() {
_teaches_spells.clear(); _teaches_spells.clear();
_grants_spells.clear(); _grants_spells.clear();
_auras.clear(); _auras.clear();
_required_character_class.unref();
} }
void ItemTemplate::_validate_property(PropertyInfo &property) const { 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); 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"); 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("get_equip_slot"), &ItemTemplate::get_equip_slot);
ClassDB::bind_method(D_METHOD("set_equip_slot", "count"), &ItemTemplate::set_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"); 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); 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"); 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 //Use spell
ClassDB::bind_method(D_METHOD("get_use_spell"), &ItemTemplate::get_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); 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("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); 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 ItemInstance;
class Aura; class Aura;
class Spell; class Spell;
class EntityClassData;
class ItemTemplate : public Resource { class ItemTemplate : public Resource {
GDCLASS(ItemTemplate, Resource); GDCLASS(ItemTemplate, Resource);
@ -37,12 +38,18 @@ public:
ItemEnums::ItemRarity get_rarity() const; ItemEnums::ItemRarity get_rarity() const;
void set_rarity(const ItemEnums::ItemRarity value); 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; ItemEnums::EquipSlots get_equip_slot() const;
void set_equip_slot(const ItemEnums::EquipSlots value); void set_equip_slot(const ItemEnums::EquipSlots value);
Ref<ItemVisual> get_item_visual() const; Ref<ItemVisual> get_item_visual() const;
void set_item_visual(const Ref<ItemVisual> value); 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; int get_price() const;
void set_price(const int value); void set_price(const int value);
@ -94,6 +101,15 @@ public:
Vector<Variant> get_auras(); Vector<Variant> get_auras();
void set_auras(const Vector<Variant> &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 //use spell
Ref<Spell> get_use_spell() const; Ref<Spell> get_use_spell() const;
void set_use_spell(Ref<Spell> use_spell); void set_use_spell(Ref<Spell> use_spell);
@ -130,6 +146,12 @@ public:
ItemTemplate(); ItemTemplate();
~ItemTemplate(); ~ItemTemplate();
public:
struct SkillEntry {
Ref<Aura> aura;
int level;
};
protected: protected:
static void _bind_methods(); static void _bind_methods();
void _validate_property(PropertyInfo &property) const; void _validate_property(PropertyInfo &property) const;
@ -145,10 +167,12 @@ private:
ItemEnums::ItemType _item_type; ItemEnums::ItemType _item_type;
ItemEnums::ItemSubtype _item_sub_type; ItemEnums::ItemSubtype _item_sub_type;
ItemEnums::ItemSubSubtype _item_sub_sub_type; ItemEnums::ItemSubSubtype _item_sub_sub_type;
ItemEnums::ArmorType _armor_type;
ItemEnums::EquipSlots _equip_slot; ItemEnums::EquipSlots _equip_slot;
int _price; int _price;
Ref<EntityClassData> _required_character_class;
Ref<ItemVisual> _item_visual; Ref<ItemVisual> _item_visual;
int _stack_size; int _stack_size;
@ -164,6 +188,7 @@ private:
Vector<Ref<Spell> > _teaches_spells; Vector<Ref<Spell> > _teaches_spells;
Vector<Ref<Spell> > _grants_spells; Vector<Ref<Spell> > _grants_spells;
Vector<Ref<Aura> > _auras; Vector<Ref<Aura> > _auras;
Vector<Ref<Aura> > _required_skills;
Ref<Spell> _use_spell; Ref<Spell> _use_spell;
int _modifier_count; int _modifier_count;