/* Copyright (c) 2019-2020 Péter Magyar Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef ITEM_TEMPLATE_H #define ITEM_TEMPLATE_H #include "core/resource.h" #include "core/vector.h" #include "scene/resources/texture.h" #include "../../entities/stats/stat.h" #include "../../item_enums.h" #include "item_template_stat_modifier.h" #include "item_visual.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); 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() const; void set_num_teaches_spells(const int value); Ref get_teaches_spell(const int index); void set_teaches_spell(const int index, const Ref &teaches_spell); Vector get_teaches_spells(); void set_teaches_spells(const Vector &teaches_spells); //Grants Spells int get_num_grants_spells() const; void set_num_grants_spells(const int value); Ref get_grants_spell(const int index); void set_grants_spell(const int index, const Ref &grants_spell); Vector get_grants_spells(); void set_grants_spells(const Vector &grants_spells); //Auras int get_num_auras() const; void set_num_auras(const int value); Ref get_aura(const int index); void set_aura(const int index, const Ref &aura); Vector get_auras(); void set_auras(const Vector &auras); //Required Skills int get_num_required_skills() const; Ref get_required_skill(const int index); void set_required_skill(const int index, const Ref &skills); Vector get_required_skills(); void set_required_skills(const Vector &grants_spells); //use spell Ref get_use_spell(); void set_use_spell(const Ref &use_spell); int get_charges() const; void set_charges(const int value); bool get_consumed() const; void set_consumed(const bool value); //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) const; void set_item_stat_id(int index, Stat::StatId value); float get_item_min_base_mod(const int index) const; void set_item_min_base_mod(const int index, const float value); float get_item_max_base_mod(const int index) const; void set_item_max_base_mod(const int index, const float value); float get_item_min_bonus_mod(const int index) const; void set_item_min_bonus_mod(const int index, const float value); float get_item_max_bonus_mod(const int index) const; void set_item_max_bonus_mod(const int index, const float value); float get_item_min_percent_mod(const int index) const; void set_item_min_percent_mod(const int index, const float value); float get_item_max_percent_mod(const int index) const; void set_item_max_percent_mod(const int index, const float value); float get_item_scaling_factor(const int index) const; void set_item_scaling_factor(const int index, const float value); Ref get_item_template_stat_modifier(const 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; 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 _charges; bool _consumed; int _modifier_count; Ref _modifiers[MAX_ITEM_STAT_MOD]; }; #endif