#pragma once #include #include #include #include "StaticRegistry.h" class Game; class Block; class Item; class BlockType : public virtual Framework::ReferenceCounter { private: const int id; protected: BlockType( int id ); virtual void loadSuperBlock( Block *zBlock, Framework::Reader *zReader ) = 0; virtual void createSuperBlock( Block *zBlock, Framework::Reader *zReader ) = 0; virtual void createSuperItem( Block *zBlock, Item *zItem ) = 0; public: virtual Block *loadBlock( Framework::Vec3 position, Game *zTarget, Framework::Reader *zReader ) = 0; virtual void saveBlock( Block *zBlock, Framework::Writer *zWriter ) = 0; virtual Item *getItemFromBlock( Block *zBlock, Game *zTarget ) = 0; virtual Block *createBlockAt( Framework::Vec3 position, Game *zTarget, Item *zUsedItem ) = 0; int getId() const; };