BlockChangedUpdate.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "BlockChangedUpdate.h"
  2. #include "Game.h"
  3. BlockChangedUpdate::BlockChangedUpdate( Framework::Vec3<int> pos, int dimension )
  4. : WorldUpdate( BlockChangedUpdateType::ID, dimension, pos, pos )
  5. {}
  6. BlockChangedUpdate::~BlockChangedUpdate()
  7. {
  8. auto b = Game::INSTANCE->zBlockAt( getMinAffectedPoint(), getAffectedDimension() );
  9. if( b.isA() && b.getA() )
  10. b.getA()->onAfterTransmission();
  11. }
  12. void BlockChangedUpdate::onUpdate( Dimension* zDimension )
  13. {}
  14. void BlockChangedUpdate::write( Framework::StreamWriter* zWriter )
  15. {
  16. int dimensionID = getAffectedDimension();
  17. zWriter->schreibe( (char*)&dimensionID, 4 );
  18. auto pos = getMinAffectedPoint();
  19. zWriter->schreibe( (char*)&pos.x, 4 );
  20. zWriter->schreibe( (char*)&pos.y, 4 );
  21. zWriter->schreibe( (char*)&pos.z, 4 );
  22. auto b = Game::INSTANCE->zBlockAt( pos, getAffectedDimension() );
  23. unsigned short blockType = b.isA() ? (unsigned short)b.getA()->zBlockType()->getId() : (unsigned short)b.getB();
  24. zWriter->schreibe( (char*)&blockType, 2 );
  25. if( b.isA() )
  26. {
  27. bool d = 1;
  28. zWriter->schreibe( (char*)&d, 1 );
  29. StaticRegistry<BlockType>::INSTANCE.zElement( blockType )->saveBlock( b.getA(), zWriter );
  30. }
  31. else
  32. {
  33. bool d = 0;
  34. zWriter->schreibe( (char*)&d, 1 );
  35. }
  36. }
  37. BlockChangedUpdateType::BlockChangedUpdateType()
  38. : WorldUpdateType( ID )
  39. {}