BlockType.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. void BlockType::updateBlock( Block* zBlock, Framework::StreamReader* zReader )
  40. {
  41. loadSuperBlock( zBlock, zReader );
  42. }
  43. int BlockType::getId() const
  44. {
  45. return id;
  46. }
  47. const Block* BlockType::zDefault()
  48. {
  49. if( !defaultBlock )
  50. defaultBlock = createBlock( { 0, 0, 0 } );
  51. return defaultBlock;
  52. }