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