#include #include #include "World.h" #include "Globals.h" #include "WorldUpdate.h" using namespace Network; using namespace Framework; World::World( Bildschirm3D *zScreen ) { renderedWorld = new Welt3D(); dimensions = new RCArray(); currentPlayer = new CurrentPlayer(); zScreenPtr = zScreen; kam = new Kam3D(); kam->setWelt( renderedWorld ); zScreen->addKamera( kam ); } World::~World() { zScreenPtr->removeKamera( kam ); dimensions->release(); currentPlayer->release(); kam->release(); } void World::update() { NetworkReader *serverMessageReader = 0; const char type = 0; while( serverMessageReader = network->zFactoryClient()->getNextMessage() ) { serverMessageReader->lese( (char *)&type, 1 ); if( type == 2 ) // WORLD UPDATE { int id = 0; serverMessageReader->lese( (char *)&id, 4 ); StaticRegistry::INSTANCE.zElement( id )->applyUpdate( serverMessageReader ); } } } void World::setChunk( Chunk *chunk, int dimensionId ) { Dimension *zDim = zDimension( dimensionId ); if( !zDim ) { zDim = new Dimension( dimensionId ); dimensions->add( zDim ); } zDim->addChunk( chunk ); zDim->updateVisibility(); } Block *World::zBlockAt( Framework::Vec3 location, int dimension ) const { Dimension *dim = zDimension( dimension ); if( dim ) return dim->zBlock( location ); return 0; } Dimension *World::zDimension( int id ) const { for( auto dim = dimensions->getIterator(); dim; dim++ ) { if( dim->getDimensionId() == id ) return dim; } return 0; } void World::setVisibility( Framework::Model3D *zModel, bool visible ) { if( visible ) renderedWorld->addZeichnung( dynamic_cast( zModel->getThis() ) ); else renderedWorld->removeZeichnung( zModel ); } Framework::Bildschirm3D *World::zScreen() const { return zScreenPtr; }