#pragma once #include #include #include #include "StaticRegistry.h" 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 initializeSuperBlock( Block* zBlock ) = 0; public: virtual Block* createBlock( Framework::Vec3 position ) = 0; virtual Block* loadBlock( Framework::Vec3 position, Framework::StreamReader* zReader ); virtual void updateBlock( Block* zBlock, Framework::StreamReader* zReader ); virtual const Block* zDefault(); virtual bool needsInstance() const = 0; int getId() const; };