#ifndef ITEM_TEMPLATE_H #define ITEM_TEMPLATE_H #include "core/resource.h" #include "scene/resources/texture.h" #include "core/vector.h" #include "item_visual.h" #include "item_template_stat_modifier.h" #include "../entities/stats/stat.h" #include "../item_enums.h" class ItemInstance; class Aura; class Spell; class EntityClassData; class ItemTemplate : public Resource { GDCLASS(ItemTemplate, Resource); public: int get_id() const; void set_id(const int value); String get_text_name() const; void set_text_name(const String value); ItemEnums::ItemType get_item_type() const; void set_item_type(const ItemEnums::ItemType value); ItemEnums::ItemSubtype get_item_sub_type() const; void set_item_sub_type(const ItemEnums::ItemSubtype value); ItemEnums::ItemSubSubtype get_item_sub_sub_type() const; void set_item_sub_sub_type(const ItemEnums::ItemSubSubtype value); 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); int get_stack_size() const; void set_stack_size(const int value); Ref get_icon() const; void set_icon(const Ref value); float get_scale_x() const; void set_scale_x(const float value); float get_scale_y() const; void set_scale_y(const float value); float get_scale_z() const; void set_scale_z(const float value); int get_bag_size() const; void set_bag_size(const int size); //Teaches int get_num_teaches_spells(); void set_num_teaches_spells(int value); Ref get_teaches_spell(int index) const; void set_teaches_spell(int index, Ref teaches_spell); Vector get_teaches_spells(); void set_teaches_spells(const Vector &teaches_spells); //Grants Spells int get_num_grants_spells(); void set_num_grants_spells(int value); Ref get_grants_spell(int index) const; void set_grants_spell(int index, Ref grants_spell); Vector get_grants_spells(); void set_grants_spells(const Vector &grants_spells); //Auras int get_num_auras(); void set_num_auras(int value); Ref get_aura(int index) const; void set_aura(int index, Ref aura); 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); //Stat mods int get_item_stat_modifier_count() const; void set_item_stat_modifier_count(const int value); Stat::StatId get_item_stat_id(int index); void set_item_stat_id(int index, Stat::StatId value); float get_item_min_base_mod(int index); void set_item_min_base_mod(int index, float value); float get_item_max_base_mod(int index); void set_item_max_base_mod(int index, float value); float get_item_min_bonus_mod(int index); void set_item_min_bonus_mod(int index, float value); float get_item_max_bonus_mod(int index); void set_item_max_bonus_mod(int index, float value); float get_item_min_percent_mod(int index); void set_item_min_percent_mod(int index, float value); float get_item_max_percent_mod(int index); void set_item_max_percent_mod(int index, float value); float get_item_scaling_factor(int index); void set_item_scaling_factor(int index, float value); Ref get_item_template_stat_modifier(int index); //void set_item_stat_modifier(int index, ItemStatModifier modifier); int get_animator_weapon_type(); Ref create_item_instance(); ItemTemplate(); ~ItemTemplate(); public: struct SkillEntry { Ref aura; int level; }; protected: static void _bind_methods(); void _validate_property(PropertyInfo &property) const; private: enum { MAX_ITEM_STAT_MOD = 6, }; int _id; String _text_name; ItemEnums::ItemRarity _rarity; 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; Ref _icon; float _scale_x; float _scale_y; float _scale_z; int _bag_size; Vector > _teaches_spells; Vector > _grants_spells; Vector > _auras; Vector > _required_skills; Ref _use_spell; int _modifier_count; Ref _modifiers[MAX_ITEM_STAT_MOD]; }; #endif