|
@@ -448,6 +448,10 @@ void SpielKlasse::stknVerarbeitung()
|
|
län--;
|
|
län--;
|
|
int sNum = 0;
|
|
int sNum = 0;
|
|
int presence = spielZeit;
|
|
int presence = spielZeit;
|
|
|
|
+ Vertex pos;
|
|
|
|
+ Vertex speed;
|
|
|
|
+ float rot;
|
|
|
|
+ float rotS;
|
|
if( presence > zeit + 10 )
|
|
if( presence > zeit + 10 )
|
|
presence = zeit + 10; // maximale zeitdifferenz von client und server
|
|
presence = zeit + 10; // maximale zeitdifferenz von client und server
|
|
switch( bytes[ 0 ] )
|
|
switch( bytes[ 0 ] )
|
|
@@ -455,72 +459,240 @@ void SpielKlasse::stknVerarbeitung()
|
|
case 0: // spieler drückt gas
|
|
case 0: // spieler drückt gas
|
|
bytes++;
|
|
bytes++;
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
|
|
+ bytes += 4;
|
|
län -= 4;
|
|
län -= 4;
|
|
|
|
+ pos.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rot = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rotS = *(float*)bytes;
|
|
|
|
+ län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
- i->setTastataturStatus( T_GAS, 1 );
|
|
|
|
|
|
+ {
|
|
|
|
+ if( i->getPosition() != pos )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, position difference: " ) += ( i->getPosition() - pos ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getSpeed() != speed )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, speed difference: " ) += ( i->getSpeed() - speed ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehung() != rot )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rot difference: " ) += ( i->getDrehung() - rot ), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehungSpeed() != rotS )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rotS difference: " ) += ( i->getDrehungSpeed() - rotS ), 0xFFFF0000 );
|
|
|
|
+ i->setTastataturStatus( T_GAS, 1 );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
goToPresence( presence );
|
|
goToPresence( presence );
|
|
break;
|
|
break;
|
|
case 1: // spieler lässt gas los
|
|
case 1: // spieler lässt gas los
|
|
bytes++;
|
|
bytes++;
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
- län -= 4;
|
|
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rot = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rotS = *(float*)bytes;
|
|
|
|
+ län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
|
|
+ {
|
|
|
|
+ if( i->getPosition() != pos )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, position difference: " ) += ( i->getPosition() - pos ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getSpeed() != speed )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, speed difference: " ) += ( i->getSpeed() - speed ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehung() != rot )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rot difference: " ) += ( i->getDrehung() - rot ), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehungSpeed() != rotS )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rotS difference: " ) += ( i->getDrehungSpeed() - rotS ), 0xFFFF0000 );
|
|
i->setTastataturStatus( T_GAS, 0 );
|
|
i->setTastataturStatus( T_GAS, 0 );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
goToPresence( presence );
|
|
goToPresence( presence );
|
|
break;
|
|
break;
|
|
case 2: // spieler drückt rotl
|
|
case 2: // spieler drückt rotl
|
|
bytes++;
|
|
bytes++;
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
- län -= 4;
|
|
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rot = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rotS = *(float*)bytes;
|
|
|
|
+ län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
|
|
+ {
|
|
|
|
+ if( i->getPosition() != pos )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, position difference: " ) += ( i->getPosition() - pos ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getSpeed() != speed )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, speed difference: " ) += ( i->getSpeed() - speed ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehung() != rot )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rot difference: " ) += ( i->getDrehung() - rot ), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehungSpeed() != rotS )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rotS difference: " ) += ( i->getDrehungSpeed() - rotS ), 0xFFFF0000 );
|
|
i->setTastataturStatus( T_ROT_L, 1 );
|
|
i->setTastataturStatus( T_ROT_L, 1 );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
goToPresence( presence );
|
|
goToPresence( presence );
|
|
break;
|
|
break;
|
|
case 3: // spieler lässt rotl los
|
|
case 3: // spieler lässt rotl los
|
|
bytes++;
|
|
bytes++;
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
- län -= 4;
|
|
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rot = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rotS = *(float*)bytes;
|
|
|
|
+ län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
|
|
+ {
|
|
|
|
+ if( i->getPosition() != pos )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, position difference: " ) += ( i->getPosition() - pos ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getSpeed() != speed )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, speed difference: " ) += ( i->getSpeed() - speed ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehung() != rot )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rot difference: " ) += ( i->getDrehung() - rot ), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehungSpeed() != rotS )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rotS difference: " ) += ( i->getDrehungSpeed() - rotS ), 0xFFFF0000 );
|
|
i->setTastataturStatus( T_ROT_L, 0 );
|
|
i->setTastataturStatus( T_ROT_L, 0 );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
goToPresence( presence );
|
|
goToPresence( presence );
|
|
break;
|
|
break;
|
|
case 4: // spieler drückt rotr
|
|
case 4: // spieler drückt rotr
|
|
bytes++;
|
|
bytes++;
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
- län -= 4;
|
|
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rot = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rotS = *(float*)bytes;
|
|
|
|
+ län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
|
|
+ {
|
|
|
|
+ if( i->getPosition() != pos )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, position difference: " ) += ( i->getPosition() - pos ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getSpeed() != speed )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, speed difference: " ) += ( i->getSpeed() - speed ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehung() != rot )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rot difference: " ) += ( i->getDrehung() - rot ), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehungSpeed() != rotS )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rotS difference: " ) += ( i->getDrehungSpeed() - rotS ), 0xFFFF0000 );
|
|
i->setTastataturStatus( T_ROT_R, 1 );
|
|
i->setTastataturStatus( T_ROT_R, 1 );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
goToPresence( presence );
|
|
goToPresence( presence );
|
|
break;
|
|
break;
|
|
case 5: // spieler lässt rotr los
|
|
case 5: // spieler lässt rotr los
|
|
bytes++;
|
|
bytes++;
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
- län -= 4;
|
|
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ pos.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.x = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ speed.y = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rot = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ rotS = *(float*)bytes;
|
|
|
|
+ län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
|
|
+ {
|
|
|
|
+ if( i->getPosition() != pos )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, position difference: " ) += ( i->getPosition() - pos ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getSpeed() != speed )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, speed difference: " ) += ( i->getSpeed() - speed ).getLength(), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehung() != rot )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rot difference: " ) += ( i->getDrehung() - rot ), 0xFFFF0000 );
|
|
|
|
+ if( i->getDrehungSpeed() != rotS )
|
|
|
|
+ chat->addNachricht( Text( "asynchrony detected, rotS difference: " ) += ( i->getDrehungSpeed() - rotS ), 0xFFFF0000 );
|
|
i->setTastataturStatus( T_ROT_R, 0 );
|
|
i->setTastataturStatus( T_ROT_R, 0 );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
goToPresence( presence );
|
|
goToPresence( presence );
|
|
break;
|
|
break;
|
|
@@ -696,7 +868,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
{
|
|
{
|
|
if( spieler->z( i )->getPosition() != Vertex( xPos, yPos ) )
|
|
if( spieler->z( i )->getPosition() != Vertex( xPos, yPos ) )
|
|
chat->addNachricht( Text( "asynchrony detected difference: " ) += ( spieler->z( i )->getPosition() - Vertex( xPos, yPos ) ).getLength(), 0xFFFF0000 );
|
|
chat->addNachricht( Text( "asynchrony detected difference: " ) += ( spieler->z( i )->getPosition() - Vertex( xPos, yPos ) ).getLength(), 0xFFFF0000 );
|
|
- spieler->z( i )->setPosition( Vec2< double >( xPos, yPos ) );
|
|
|
|
|
|
+ spieler->z( i )->setPosition( Vertex( xPos, yPos ) );
|
|
spieler->z( i )->hatGeschossen();
|
|
spieler->z( i )->hatGeschossen();
|
|
farbe = spieler->z( i )->zTeam()->farbe;
|
|
farbe = spieler->z( i )->zTeam()->farbe;
|
|
break;
|
|
break;
|
|
@@ -745,6 +917,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
{
|
|
{
|
|
intens = tmp->getIntensität( s->getSpeed() );
|
|
intens = tmp->getIntensität( s->getSpeed() );
|
|
s->nimmSchaden( intens );
|
|
s->nimmSchaden( intens );
|
|
|
|
+ s->impuls( tmp->getPosition() - tmp->getSpeed(), tmp->getSpeed() * 0.3f );
|
|
s->calcDeadPlayerObject( schüsse->z( i ) );
|
|
s->calcDeadPlayerObject( schüsse->z( i ) );
|
|
bestenliste->updateSpieler( s );
|
|
bestenliste->updateSpieler( s );
|
|
break;
|
|
break;
|