World.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include <Network.h>
  2. #include <Welt3D.h>
  3. #include "World.h"
  4. #include "Globals.h"
  5. #include "WorldUpdate.h"
  6. using namespace Network;
  7. using namespace Framework;
  8. World::World( Bildschirm3D *zScreen )
  9. {
  10. renderedWorld = new Welt3D();
  11. dimensions = new RCArray<Dimension>();
  12. currentPlayer = new CurrentPlayer();
  13. zScreenPtr = zScreen;
  14. kam = new Kam3D();
  15. kam->setWelt( renderedWorld );
  16. zScreen->addKamera( kam );
  17. }
  18. World::~World()
  19. {
  20. zScreenPtr->removeKamera( kam );
  21. dimensions->release();
  22. currentPlayer->release();
  23. kam->release();
  24. }
  25. void World::update()
  26. {
  27. NetworkReader *serverMessageReader = 0;
  28. const char type = 0;
  29. while( serverMessageReader = network->zFactoryClient()->getNextMessage() )
  30. {
  31. serverMessageReader->lese( (char *)&type, 1 );
  32. if( type == 2 ) // WORLD UPDATE
  33. {
  34. int id = 0;
  35. serverMessageReader->lese( (char *)&id, 4 );
  36. StaticRegistry<WorldUpdateType>::INSTANCE.zElement( id )->applyUpdate( serverMessageReader );
  37. }
  38. }
  39. }
  40. void World::setChunk( Chunk *chunk, int dimensionId )
  41. {
  42. Dimension *zDim = zDimension( dimensionId );
  43. if( !zDim )
  44. {
  45. zDim = new Dimension( dimensionId );
  46. dimensions->add( zDim );
  47. }
  48. zDim->addChunk( chunk );
  49. zDim->updateVisibility();
  50. }
  51. Block *World::zBlockAt( Framework::Vec3<int> location, int dimension ) const
  52. {
  53. Dimension *dim = zDimension( dimension );
  54. if( dim )
  55. return dim->zBlock( location );
  56. return 0;
  57. }
  58. Dimension *World::zDimension( int id ) const
  59. {
  60. for( auto dim = dimensions->getIterator(); dim; dim++ )
  61. {
  62. if( dim->getDimensionId() == id )
  63. return dim;
  64. }
  65. return 0;
  66. }
  67. void World::setVisibility( Framework::Model3D *zModel, bool visible )
  68. {
  69. if( visible )
  70. renderedWorld->addZeichnung( dynamic_cast<Framework::Model3D *>( zModel->getThis() ) );
  71. else
  72. renderedWorld->removeZeichnung( zModel );
  73. }
  74. Framework::Bildschirm3D *World::zScreen() const
  75. {
  76. return zScreenPtr;
  77. }