#pragma once #include #include #include #include #include "Effect.h" #include "StaticRegistry.h" class Item; class ItemStack; class ItemSkill; class ItemSkillLevelUpRule; class ItemType : public virtual Framework::ReferenceCounter { private: const int id; ItemSkillLevelUpRule *levelUpRule; protected: ItemType( int id, ItemSkillLevelUpRule *levelUpRule ); virtual void loadSupperItem( Item *zItem, Framework::Reader *zReader ) const; virtual void saveSupperItem( Item *zItem, Framework::Writer *zWriter ) const; public: ~ItemType(); int getId() const; virtual Item *createItem() const = 0; virtual ItemStack *createItemStack( int size ) const; virtual ItemSkill *createDefaultItemSkill() const; virtual void levelUpItemSkill( ItemSkill *zSkill ) const; virtual Item *loadItem( Framework::Reader *zReader ) const; virtual void saveItem( Item *zItem, Framework::Writer *zWriter ) const; };