|
@@ -13,7 +13,7 @@
|
|
// Konstruktor
|
|
// Konstruktor
|
|
SpielKlasse::SpielKlasse()
|
|
SpielKlasse::SpielKlasse()
|
|
{
|
|
{
|
|
- spielZeit = 0;
|
|
|
|
|
|
+ spielZeit = -1;
|
|
rZeit = 0;
|
|
rZeit = 0;
|
|
rendern = 0;
|
|
rendern = 0;
|
|
stkn = new RCArray< STKNachricht >();
|
|
stkn = new RCArray< STKNachricht >();
|
|
@@ -256,7 +256,6 @@ void SpielKlasse::ladeDaten()
|
|
for( int i = 0; i < map->getMaxSpielerAnzahl(); i++ )
|
|
for( int i = 0; i < map->getMaxSpielerAnzahl(); i++ )
|
|
{
|
|
{
|
|
Spieler *s = map->createSpieler( i, schrift, infoKlient, flammenStart, flammenBurn );
|
|
Spieler *s = map->createSpieler( i, schrift, infoKlient, flammenStart, flammenBurn );
|
|
- welt->addObject( s->getThis() );
|
|
|
|
spieler->set( s, i );
|
|
spieler->set( s, i );
|
|
}
|
|
}
|
|
flammenStart->release();
|
|
flammenStart->release();
|
|
@@ -442,16 +441,15 @@ void SpielKlasse::stknVerarbeitung()
|
|
{
|
|
{
|
|
STKNachricht *n = stkn->z( i );
|
|
STKNachricht *n = stkn->z( i );
|
|
int zeit = n->getSpielZeit();
|
|
int zeit = n->getSpielZeit();
|
|
- if( zeit > spielZeit )
|
|
|
|
- {
|
|
|
|
- chat->addNachricht( "Receved a message from the future.", 0xFFFF0000 );
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ while( zeit > spielZeit )
|
|
|
|
+ tick();
|
|
int län = n->getLength();
|
|
int län = n->getLength();
|
|
char *bytes = n->getNachricht();
|
|
char *bytes = n->getNachricht();
|
|
län--;
|
|
län--;
|
|
int sNum = 0;
|
|
int sNum = 0;
|
|
int presence = spielZeit;
|
|
int presence = spielZeit;
|
|
|
|
+ if( presence > zeit + 10 )
|
|
|
|
+ presence = zeit + 10; // maximale zeitdifferenz von client und server
|
|
switch( bytes[ 0 ] )
|
|
switch( bytes[ 0 ] )
|
|
{
|
|
{
|
|
case 0: // spieler drückt gas
|
|
case 0: // spieler drückt gas
|
|
@@ -459,7 +457,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ((Text( "Player " ) += sNum) += " gibt gaß at time ") += zeit, 0xFF909090 );
|
|
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
@@ -472,7 +469,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " stoppt gaß at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
@@ -485,7 +481,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " drückt 'left' at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
@@ -498,7 +493,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " stoppt 'left' at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
@@ -511,7 +505,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " drückt 'right' at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
@@ -524,7 +517,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " stoppt 'right' at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
{
|
|
{
|
|
if( i->getSpielerNummer() == sNum )
|
|
if( i->getSpielerNummer() == sNum )
|
|
@@ -539,7 +531,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
spielerAnzahl = (int)*bytes;
|
|
spielerAnzahl = (int)*bytes;
|
|
bytes++;
|
|
bytes++;
|
|
län--;
|
|
län--;
|
|
- //chat->addNachricht( "Player initialisation", 0xFF909090 );
|
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
{
|
|
{
|
|
int sNum = *(int*)bytes;
|
|
int sNum = *(int*)bytes;
|
|
@@ -556,13 +547,13 @@ void SpielKlasse::stknVerarbeitung()
|
|
bestenliste->addSpieler( tmp );
|
|
bestenliste->addSpieler( tmp );
|
|
bestenliste->updateSpieler( tmp );
|
|
bestenliste->updateSpieler( tmp );
|
|
bestenliste->updateTeam( tmp->zTeam() );
|
|
bestenliste->updateTeam( tmp->zTeam() );
|
|
|
|
+ welt->addObject( tmp->getThis() );
|
|
}
|
|
}
|
|
int max = map->getMaxSpielerAnzahl();
|
|
int max = map->getMaxSpielerAnzahl();
|
|
for( int i = 0; i < max; i++ )
|
|
for( int i = 0; i < max; i++ )
|
|
{
|
|
{
|
|
if( !spieler->z( i )->zTeam() )
|
|
if( !spieler->z( i )->zTeam() )
|
|
{
|
|
{
|
|
- welt->removeObject( spieler->z( i ) );
|
|
|
|
spieler->remove( i );
|
|
spieler->remove( i );
|
|
i--;
|
|
i--;
|
|
max--;
|
|
max--;
|
|
@@ -585,7 +576,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
bytes++;
|
|
bytes++;
|
|
spielerNummer = *(int*)bytes;
|
|
spielerNummer = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
- //chat->addNachricht( "Spielernummer zugewiesen", 0xFF909090 );
|
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
{
|
|
{
|
|
if( spieler->z( i )->getSpielerNummer() == spielerNummer )
|
|
if( spieler->z( i )->getSpielerNummer() == spielerNummer )
|
|
@@ -598,7 +588,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
case 0xA: // Start
|
|
case 0xA: // Start
|
|
spielPause = 0;
|
|
spielPause = 0;
|
|
rendern = 1;
|
|
rendern = 1;
|
|
- //chat->addNachricht( "Spiel beginnt jetzt", 0xFF909090 );
|
|
|
|
break;
|
|
break;
|
|
case 0xB: // Ende
|
|
case 0xB: // Ende
|
|
//chat->addNachricht( "Spiel beendet", 0xFF909090 );
|
|
//chat->addNachricht( "Spiel beendet", 0xFF909090 );
|
|
@@ -643,7 +632,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
line += "\n";
|
|
line += "\n";
|
|
csv.schreibe( line, line.getLength() );
|
|
csv.schreibe( line, line.getLength() );
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " has improoved skill at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
{
|
|
{
|
|
if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
@@ -679,41 +667,42 @@ void SpielKlasse::stknVerarbeitung()
|
|
case 0xD: // Schuss
|
|
case 0xD: // Schuss
|
|
if( 1 )
|
|
if( 1 )
|
|
{
|
|
{
|
|
- bytes++;
|
|
|
|
|
|
+ bytes++;
|
|
int id = *(int*)bytes;
|
|
int id = *(int*)bytes;
|
|
bytes += 4;
|
|
bytes += 4;
|
|
län -= 4;
|
|
län -= 4;
|
|
sNum = *(int*)bytes;
|
|
sNum = *(int*)bytes;
|
|
bytes += 4;
|
|
bytes += 4;
|
|
län -= 4;
|
|
län -= 4;
|
|
- double xPos = *(double*)bytes;
|
|
|
|
- bytes += 8;
|
|
|
|
- län -= 8;
|
|
|
|
- double yPos = *(double*)bytes;
|
|
|
|
- bytes += 8;
|
|
|
|
- län -= 8;
|
|
|
|
- double xSpeed = *(double*)bytes;
|
|
|
|
- bytes += 8;
|
|
|
|
- län -= 8;
|
|
|
|
- double ySpeed = *(double*)bytes;
|
|
|
|
- bytes += 8;
|
|
|
|
- län -= 8;
|
|
|
|
|
|
+ float xPos = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ float yPos = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ float xSpeed = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
|
|
+ float ySpeed = *(float*)bytes;
|
|
|
|
+ bytes += 4;
|
|
|
|
+ län -= 4;
|
|
double intensität = *(double*)bytes;
|
|
double intensität = *(double*)bytes;
|
|
län -= 8;
|
|
län -= 8;
|
|
int farbe = 0;
|
|
int farbe = 0;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " shoot's at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
{
|
|
{
|
|
if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
{
|
|
{
|
|
|
|
+ if( spieler->z( i )->getPosition() != Vertex( xPos, yPos ) )
|
|
|
|
+ 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( Vec2< double >( xPos, yPos ) );
|
|
spieler->z( i )->hatGeschossen();
|
|
spieler->z( i )->hatGeschossen();
|
|
farbe = spieler->z( i )->zTeam()->farbe;
|
|
farbe = spieler->z( i )->zTeam()->farbe;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- Laser *l = new Laser( id, Vec2< double >( xPos, yPos ), Vec2< double >( xSpeed, ySpeed ), sNum, intensität, farbe );
|
|
|
|
|
|
+ Laser *l = new Laser( id, Vertex( xPos, yPos ), Vertex( xSpeed, ySpeed ), sNum, intensität, farbe );
|
|
welt->addObject( l->getThis() );
|
|
welt->addObject( l->getThis() );
|
|
schüsse->add( l );
|
|
schüsse->add( l );
|
|
goToPresence( presence );
|
|
goToPresence( presence );
|
|
@@ -741,13 +730,12 @@ void SpielKlasse::stknVerarbeitung()
|
|
int sNum = *(int*)bytes;
|
|
int sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " was damaged at time " ) += zeit, 0xFF909090 );
|
|
|
|
- for( auto tmp = schüsse->getIterator(); tmp; tmp++ )
|
|
|
|
|
|
+ int sAnz = schüsse->getEintragAnzahl();
|
|
|
|
+ for( int i = 0; i < sAnz; i++ )
|
|
{
|
|
{
|
|
- if( tmp->getId() == schuss )
|
|
|
|
|
|
+ Laser *tmp = schüsse->z( i );
|
|
|
|
+ if( tmp && tmp->getId() == schuss )
|
|
{
|
|
{
|
|
- for( int i = 0; i < spielZeit - zeit; i++ )
|
|
|
|
- tmp->tick( welt->getWorldInfo(), -TICK );
|
|
|
|
if( sNum >= 0 )
|
|
if( sNum >= 0 )
|
|
{
|
|
{
|
|
double intens = 0;
|
|
double intens = 0;
|
|
@@ -798,7 +786,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
int sNum = *(int*)bytes;
|
|
int sNum = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " was reborn at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
{
|
|
{
|
|
if( s->getSpielerNummer() == sNum )
|
|
if( s->getSpielerNummer() == sNum )
|
|
@@ -831,7 +818,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
int killer = *(int*)bytes;
|
|
int killer = *(int*)bytes;
|
|
län -= 4;
|
|
län -= 4;
|
|
goBackInTime( zeit );
|
|
goBackInTime( zeit );
|
|
- //chat->addNachricht( ( ( Text( "Player " ) += sNum ) += " dyed at time " ) += zeit, 0xFF909090 );
|
|
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
{
|
|
{
|
|
if( s->getSpielerNummer() == sNum )
|
|
if( s->getSpielerNummer() == sNum )
|
|
@@ -896,12 +882,14 @@ bool SpielKlasse::tick( double zeit )
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
rZeit += zeit;
|
|
rZeit += zeit;
|
|
- while( TICK < rZeit )
|
|
|
|
|
|
+ while( TICK <= rZeit )
|
|
{
|
|
{
|
|
rZeit -= TICK;
|
|
rZeit -= TICK;
|
|
if( end )
|
|
if( end )
|
|
return 1;
|
|
return 1;
|
|
lock();
|
|
lock();
|
|
|
|
+ if( spielZeit == -1 )
|
|
|
|
+ save(); // speichern
|
|
// tote spieler
|
|
// tote spieler
|
|
int deadsCount = deads->getEintragAnzahl();
|
|
int deadsCount = deads->getEintragAnzahl();
|
|
for( int i = 0; i < deadsCount; i++ )
|
|
for( int i = 0; i < deadsCount; i++ )
|
|
@@ -966,12 +954,10 @@ void SpielKlasse::render( Bild &zRObj )
|
|
kam->lookAtWorldArea( zRObj.getBreite(), zRObj.getHeight() );
|
|
kam->lookAtWorldArea( zRObj.getBreite(), zRObj.getHeight() );
|
|
kam->setSize( zRObj.getSize() );
|
|
kam->setSize( zRObj.getSize() );
|
|
kam->render( zRObj );
|
|
kam->render( zRObj );
|
|
- zRObj.setAlpha( 50 );
|
|
|
|
minimap->setPosition( zRObj.getSize() - Punkt( 210, 210 ) );
|
|
minimap->setPosition( zRObj.getSize() - Punkt( 210, 210 ) );
|
|
minimap->lookAtWorldPos( welt->getWorldInfo().size.x / 2, welt->getWorldInfo().size.y / 2 );
|
|
minimap->lookAtWorldPos( welt->getWorldInfo().size.x / 2, welt->getWorldInfo().size.y / 2 );
|
|
minimap->lookAtWorldArea( welt->getWorldInfo().size.x, welt->getWorldInfo().size.y );
|
|
minimap->lookAtWorldArea( welt->getWorldInfo().size.x, welt->getWorldInfo().size.y );
|
|
minimap->render( zRObj );
|
|
minimap->render( zRObj );
|
|
- zRObj.releaseAlpha();
|
|
|
|
chat->render( zRObj );
|
|
chat->render( zRObj );
|
|
if( bestenliste )
|
|
if( bestenliste )
|
|
bestenliste->render( zRObj );
|
|
bestenliste->render( zRObj );
|