BlockType.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "BlockType.h"
  2. #include "ItemType.h"
  3. #include "BasicBlocks.h"
  4. #include "Block.h"
  5. using namespace Framework;
  6. BlockType::BlockType( int id )
  7. : ReferenceCounter(),
  8. id( id )
  9. {
  10. StaticRegistry<BlockType>::INSTANCE.registerT( this, id );
  11. }
  12. void BlockType::loadSuperBlock( Block *zBlock, Framework::StreamReader *zReader )
  13. {
  14. zBlock->loadInventory( zReader );
  15. zReader->lese( (char *)&zBlock->transparent, 1 );
  16. zReader->lese( (char *)&zBlock->passable, 1 );
  17. zReader->lese( (char *)&zBlock->hp, 4 );
  18. zReader->lese( (char *)&zBlock->maxHP, 4 );
  19. zReader->lese( (char *)&zBlock->hardness, 4 );
  20. zReader->lese( (char *)&zBlock->speedModifier, 4 );
  21. int effectiveToolId;
  22. zReader->lese( (char *)&effectiveToolId, 4 );
  23. zBlock->zTool = StaticRegistry<ItemType>::INSTANCE.zElement( effectiveToolId );
  24. }
  25. void BlockType::saveSuperBlock( Block *zBlock, Framework::StreamWriter *zWriter )
  26. {
  27. zBlock->saveInventory( zWriter );
  28. zWriter->schreibe( (char *)&zBlock->transparent, 1 );
  29. zWriter->schreibe( (char *)&zBlock->passable, 1 );
  30. zWriter->schreibe( (char *)&zBlock->hp, 4 );
  31. zWriter->schreibe( (char *)&zBlock->maxHP, 4 );
  32. zWriter->schreibe( (char *)&zBlock->hardness, 4 );
  33. zWriter->schreibe( (char *)&zBlock->speedModifier, 4 );
  34. int effectiveToolId = zBlock->zTool->getId();
  35. zWriter->schreibe( (char *)&effectiveToolId, 4 );
  36. }
  37. void BlockType::createSuperBlock( Block *zBlock, Item *zItem )
  38. {
  39. BasicBlockItem *item = dynamic_cast<BasicBlockItem *>( zItem );
  40. if( !item )
  41. {
  42. throw "BlockType::createSuperBlock was called with an item witch was not an instance of BasicBlockItem";
  43. }
  44. zBlock->transparent = item->transparent;
  45. zBlock->passable = item->passable;
  46. zBlock->hp = item->hp;
  47. zBlock->maxHP = item->maxHP;
  48. zBlock->hardness = item->hardness;
  49. zBlock->speedModifier = item->speedModifier;
  50. zBlock->zTool = StaticRegistry<ItemType>::INSTANCE.zElement( item->toolId );
  51. }
  52. void BlockType::createSuperItem( Block *zBlock, Item *zItem )
  53. {
  54. BasicBlockItem *item = dynamic_cast<BasicBlockItem *>( zItem );
  55. if( !item )
  56. {
  57. throw "BlockType::createSuperItem was called with an item witch was not an instance of BasicBlockItem";
  58. }
  59. item->transparent = zBlock->transparent;
  60. item->passable = zBlock->passable;
  61. item->hp = zBlock->maxHP; // reset hp
  62. item->maxHP = zBlock->maxHP;
  63. item->hardness = zBlock->hardness;
  64. item->speedModifier = zBlock->speedModifier;
  65. item->toolId = zBlock->zTool->getId();
  66. }
  67. Block *BlockType::loadBlock( Framework::Vec3<int> position, Game *zTarget, Framework::StreamReader *zReader )
  68. {
  69. Block *result = createBlock( position, zTarget );
  70. loadSuperBlock( result, zReader );
  71. return result;
  72. }
  73. void BlockType::saveBlock( Block *zBlock, Framework::StreamWriter *zWriter )
  74. {
  75. saveSuperBlock( zBlock, zWriter );
  76. }
  77. Item *BlockType::getItemFromBlock( Block *zBlock, Game *zTarget )
  78. {
  79. Item *result = createItem( zTarget );
  80. createSuperItem( zBlock, result );
  81. return result;
  82. }
  83. Block *BlockType::createBlockAt( Framework::Vec3<int> position, Game *zTarget, Item *zUsedItem )
  84. {
  85. Block *result = createBlock( position, zTarget );
  86. createSuperBlock( result, zUsedItem );
  87. return result;
  88. }
  89. int BlockType::getId() const
  90. {
  91. return id;
  92. }