|
@@ -6,6 +6,7 @@
|
|
|
#include "NoBlock.h"
|
|
|
#include "AsynchronCall.h"
|
|
|
#include "Entity.h"
|
|
|
+#include "AddEntityUpdate.h"
|
|
|
|
|
|
using namespace Framework;
|
|
|
|
|
@@ -29,7 +30,7 @@ GameClient::GameClient( Player* zPlayer, FCKlient* client )
|
|
|
other.unlock();
|
|
|
background.lock();
|
|
|
this->client->zBackgroundWriter()->schreibe( (char*)&Message::WORLD_UPDATE, 1 );
|
|
|
- update->write( this->client->zBackgroundWriter() );
|
|
|
+ update->writeAndCheck( this->client->zBackgroundWriter() );
|
|
|
background.unlock();
|
|
|
update->release();
|
|
|
}
|
|
@@ -92,34 +93,14 @@ void GameClient::reply()
|
|
|
int x = (int)floor( zPlayer->getPosition().x );
|
|
|
int y = (int)floor( zPlayer->getPosition().y );
|
|
|
int d = zPlayer->getCurrentDimensionId();
|
|
|
- foreground.lock();
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&Message::POSITION_UPDATE, 1 );
|
|
|
- float f = zPlayer->getPosition().x;
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&f, 4 );
|
|
|
- f = zPlayer->getPosition().y;
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&f, 4 );
|
|
|
- f = zPlayer->getPosition().z;
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&f, 4 );
|
|
|
- if( first )
|
|
|
- {
|
|
|
- f = zPlayer->getFaceDir().x;
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&f, 4 );
|
|
|
- f = zPlayer->getFaceDir().y;
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&f, 4 );
|
|
|
- f = zPlayer->getFaceDir().z;
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&f, 4 );
|
|
|
- }
|
|
|
- if( zPlayer->zTarget() )
|
|
|
- zPlayer->zTarget()->save( client->zForegroundWriter() );
|
|
|
- else
|
|
|
- {
|
|
|
- char b = 0;
|
|
|
- client->zForegroundWriter()->schreibe( &b, 1 );
|
|
|
- }
|
|
|
- foreground.unlock();
|
|
|
// send world to client
|
|
|
if( first )
|
|
|
{
|
|
|
+ foreground.lock();
|
|
|
+ int id = zPlayer->getId();
|
|
|
+ client->zForegroundWriter()->schreibe( (char*)&Message::POSITION_UPDATE, 1 );
|
|
|
+ client->zForegroundWriter()->schreibe( (char*)&id, 4 );
|
|
|
+ foreground.unlock();
|
|
|
first = 0;
|
|
|
Dimension* dim = Game::INSTANCE->zDimension( d );
|
|
|
if( dim )
|
|
@@ -417,7 +398,6 @@ GameClient* Game::addPlayer( FCKlient* client, Framework::Text name )
|
|
|
Sleep( 1000 );
|
|
|
cs.lock();
|
|
|
}
|
|
|
- zDimension( player->getCurrentDimensionId() )->addEntity( player );
|
|
|
if( isNew )
|
|
|
{
|
|
|
Either<Block*, int> b = AirBlockBlockType::ID;
|
|
@@ -426,6 +406,7 @@ GameClient* Game::addPlayer( FCKlient* client, Framework::Text name )
|
|
|
b = zBlockAt( { (int)player->getPosition().x, (int)player->getPosition().y, --h }, player->getCurrentDimensionId() );
|
|
|
player->setPosition( { player->getPosition().x, player->getPosition().y, (float)h + 1.f } );
|
|
|
}
|
|
|
+ requestWorldUpdate( new AddEntityUpdate( player, player->getCurrentDimensionId() ) );
|
|
|
cs.unlock();
|
|
|
return dynamic_cast<GameClient*>(gameClient->getThis());
|
|
|
}
|