BlockType.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "BlockType.h"
  2. #include "Block.h"
  3. #include "Registries.h"
  4. using namespace Framework;
  5. BlockType::BlockType( int id )
  6. : ReferenceCounter(),
  7. id( id ),
  8. defaultBlock( 0 )
  9. {
  10. STATIC_REGISTRY( BlockType ).registerT( this, id );
  11. }
  12. BlockType::~BlockType()
  13. {
  14. if( defaultBlock )
  15. defaultBlock->release();
  16. }
  17. void BlockType::loadSuperBlock( Block* zBlock, Framework::StreamReader* zReader )
  18. {
  19. zBlock->loadInventory( zReader );
  20. zReader->lese( (char*)&zBlock->transparent, 1 );
  21. zReader->lese( (char*)&zBlock->passable, 1 );
  22. zReader->lese( (char*)&zBlock->hp, 4 );
  23. zReader->lese( (char*)&zBlock->maxHP, 4 );
  24. zReader->lese( (char*)&zBlock->hardness, 4 );
  25. zReader->lese( (char*)&zBlock->speedModifier, 4 );
  26. int effectiveToolId;
  27. zReader->lese( (char*)&effectiveToolId, 4 );
  28. if( effectiveToolId >= 0 )
  29. zBlock->zTool = STATIC_REGISTRY( ItemType ).zElement( effectiveToolId );
  30. else
  31. zBlock->zTool = 0;
  32. }
  33. Block* BlockType::loadBlock( Framework::Vec3<int> position, Framework::StreamReader* zReader )
  34. {
  35. Block* result = createBlock( position );
  36. loadSuperBlock( result, zReader );
  37. return result;
  38. }
  39. int BlockType::getId() const
  40. {
  41. return id;
  42. }
  43. const Block* BlockType::zDefault()
  44. {
  45. if( !defaultBlock )
  46. defaultBlock = createBlock( { 0, 0, 0 } );
  47. return defaultBlock;
  48. }