|
@@ -27,10 +27,19 @@ void GameClient::sendWorldUpdate( WorldUpdate* update )
|
|
|
if( zPlayer->getCurrentDimensionId() == update->getAffectedDimension() )
|
|
|
{
|
|
|
auto pos = (Vec3<int>)zPlayer->getPosition();
|
|
|
- if( abs( pos.x - update->getMinAffectedPoint().x ) < viewDistance * CHUNK_SIZE || (abs( pos.x - update->getMaxAffectedPoint().x ) < viewDistance * CHUNK_SIZE) || abs( pos.y - update->getMinAffectedPoint().y ) < viewDistance * CHUNK_SIZE || (abs( pos.y - update->getMaxAffectedPoint().y ) < viewDistance * CHUNK_SIZE) )
|
|
|
+ int dist = update->distanceTo( pos.x, pos.y );
|
|
|
+ if( dist < viewDistance * CHUNK_SIZE )
|
|
|
{
|
|
|
other.Enter();
|
|
|
- updateQueue.add( update );
|
|
|
+ int index = 0;
|
|
|
+ for( auto update2 : updateQueue )
|
|
|
+ {
|
|
|
+ int dist2 = update2->distanceTo( pos.x, pos.y );
|
|
|
+ if( dist2 >= dist )
|
|
|
+ break;
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ updateQueue.add( update, index );
|
|
|
other.Leave();
|
|
|
add = 1;
|
|
|
}
|
|
@@ -50,7 +59,6 @@ void GameClient::reply( Game* zGame )
|
|
|
int y = (int)zPlayer->getPosition().y;
|
|
|
int d = zPlayer->getCurrentDimensionId();
|
|
|
foreground.Enter();
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&Message::INGAME_MESSAGE, 1 );
|
|
|
client->zForegroundWriter()->schreibe( (char*)&Message::POSITION_UPDATE, 1 );
|
|
|
float f = zPlayer->getPosition().x;
|
|
|
client->zForegroundWriter()->schreibe( (char*)&f, 4 );
|
|
@@ -67,7 +75,6 @@ void GameClient::reply( Game* zGame )
|
|
|
if( updateQueue.hat( 0 ) )
|
|
|
{
|
|
|
background.Enter();
|
|
|
- client->zBackgroundWriter()->schreibe( (char*)&Message::INGAME_MESSAGE, 1 );
|
|
|
client->zBackgroundWriter()->schreibe( (char*)&Message::WORLD_UPDATE, 1 );
|
|
|
updateQueue.z( 0 )->write( client->zBackgroundWriter() );
|
|
|
updateQueue.remove( 0 );
|
|
@@ -144,7 +151,6 @@ void GameClient::sendResponse( NetworkResponse* zResponse )
|
|
|
if( zResponse->isUseBackground() )
|
|
|
{
|
|
|
background.Leave();
|
|
|
- client->zBackgroundWriter()->schreibe( (char*)&Message::INGAME_MESSAGE, 1 );
|
|
|
client->zBackgroundWriter()->schreibe( (char*)&Message::API_MESSAGE, 1 );
|
|
|
zResponse->writeTo( client->zBackgroundWriter() );
|
|
|
background.Leave();
|
|
@@ -152,7 +158,6 @@ void GameClient::sendResponse( NetworkResponse* zResponse )
|
|
|
else
|
|
|
{
|
|
|
foreground.Leave();
|
|
|
- client->zForegroundWriter()->schreibe( (char*)&Message::INGAME_MESSAGE, 1 );
|
|
|
client->zForegroundWriter()->schreibe( (char*)&Message::API_MESSAGE, 1 );
|
|
|
zResponse->writeTo( client->zForegroundWriter() );
|
|
|
foreground.Leave();
|