BlockChangedUpdate.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. WorldUpdate::write( zWriter );
  17. int dimensionID = getAffectedDimension();
  18. zWriter->schreibe( (char*)&dimensionID, 4 );
  19. auto pos = getMinAffectedPoint();
  20. zWriter->schreibe( (char*)&pos.x, 4 );
  21. zWriter->schreibe( (char*)&pos.y, 4 );
  22. zWriter->schreibe( (char*)&pos.z, 4 );
  23. auto b = Game::INSTANCE->zBlockAt( pos, getAffectedDimension() );
  24. unsigned short blockType = b.isA() ? (unsigned short)b.getA()->zBlockType()->getId() : (unsigned short)b.getB();
  25. zWriter->schreibe( (char*)&blockType, 2 );
  26. if( b.isA() )
  27. {
  28. bool d = 1;
  29. zWriter->schreibe( (char*)&d, 1 );
  30. StaticRegistry<BlockType>::INSTANCE.zElement( blockType )->saveBlock( b.getA(), zWriter );
  31. }
  32. else
  33. {
  34. bool d = 0;
  35. zWriter->schreibe( (char*)&d, 1 );
  36. }
  37. }
  38. BlockChangedUpdateType::BlockChangedUpdateType()
  39. : WorldUpdateType( ID )
  40. {}