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