BlockType.cpp 3.1 KB

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