#pragma once #include #include #include #include "StaticRegistry.h" class Game; class Item; class Block; class BlockType : public virtual Framework::ReferenceCounter { private: const int id; Block* defaultBlock; protected: BlockType( int id ); virtual ~BlockType(); 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 ); virtual const Block* zDefault(); int getId() const; };