BlockType.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include <Vec3.h>
  3. #include <Array.h>
  4. #include <Writer.h>
  5. #include <Either.h>
  6. #include "StaticRegistry.h"
  7. class Item;
  8. class Block;
  9. class BlockType : public virtual Framework::ReferenceCounter
  10. {
  11. private:
  12. const int id;
  13. protected:
  14. Block* defaultBlock;
  15. BlockType( int id, Block* defaultBlock );
  16. virtual ~BlockType();
  17. virtual void loadSuperBlock( Block* zBlock, Framework::StreamReader* zReader ) const;
  18. virtual void saveSuperBlock( Block* zBlock, Framework::StreamWriter* zWriter ) const;
  19. virtual void createSuperBlock( Block* zBlock, Item* zItem ) const;
  20. virtual void createSuperItem( Block* zBlock, Item* zItem ) const;
  21. virtual Block* createBlock( Framework::Vec3<int> position ) const = 0;
  22. virtual Item* createItem() const = 0;
  23. public:
  24. virtual Block* loadBlock( Framework::Vec3<int> position, Framework::StreamReader* zReader ) const;
  25. virtual void saveBlock( Block* zBlock, Framework::StreamWriter* zWriter ) const;
  26. virtual Item* getItemFromBlock( Block* zBlock ) const;
  27. virtual Block* createBlockAt( Framework::Vec3<int> position, Item* zUsedItem ) const;
  28. virtual const Block* zDefault() const;
  29. int getId() const;
  30. };
  31. const Block* getDefaultBlock( Framework::Either<Block*, int> b );