|
@@ -31,12 +31,15 @@ SpielKlasse::SpielKlasse()
|
|
screen = 0;
|
|
screen = 0;
|
|
welt = new Welt2D();
|
|
welt = new Welt2D();
|
|
welt->setCircular( 1 );
|
|
welt->setCircular( 1 );
|
|
- welt->setAirResistance( 0.01f );
|
|
|
|
|
|
+ welt->setAirResistance( 0.001f );
|
|
kam = new Kamera2D();
|
|
kam = new Kamera2D();
|
|
kam->setWelt( welt->getThis(), 1 );
|
|
kam->setWelt( welt->getThis(), 1 );
|
|
minimap = new Kamera2D();
|
|
minimap = new Kamera2D();
|
|
minimap->setSize( 200, 200 );
|
|
minimap->setSize( 200, 200 );
|
|
minimap->setWelt( welt->getThis(), 0 );
|
|
minimap->setWelt( welt->getThis(), 0 );
|
|
|
|
+ minimap->setStyle( ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Rahmen );
|
|
|
|
+ minimap->setLinienRahmenFarbe( 0xFFFFFFFF );
|
|
|
|
+ minimap->setName( "minimap" );
|
|
spielerAnzahl = 0;
|
|
spielerAnzahl = 0;
|
|
karteId = 0;
|
|
karteId = 0;
|
|
ladenProzent = 0;
|
|
ladenProzent = 0;
|
|
@@ -52,6 +55,7 @@ SpielKlasse::SpielKlasse()
|
|
shipGUI = 0;
|
|
shipGUI = 0;
|
|
spielPause = 1;
|
|
spielPause = 1;
|
|
ref = 1;
|
|
ref = 1;
|
|
|
|
+ save();
|
|
}
|
|
}
|
|
|
|
|
|
// Destruktor
|
|
// Destruktor
|
|
@@ -104,14 +108,42 @@ bool SpielKlasse::istAmLeben() const
|
|
|
|
|
|
void SpielKlasse::goBackInTime( int zeit )
|
|
void SpielKlasse::goBackInTime( int zeit )
|
|
{
|
|
{
|
|
|
|
+ if( zeit < last.spielZeit )
|
|
|
|
+ chat->addNachricht( "Fehler: Es wurde versucht das Spiel auf einen Zeitpunkt zurückzusetzen, welcher nicht mehr erreicht werden kann.", 0xFFFF0000 );
|
|
|
|
+ load();
|
|
|
|
+ while( spielZeit < zeit )
|
|
|
|
+ tick();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void SpielKlasse::goToPresence( int zeit )
|
|
|
|
+{
|
|
|
|
+ save();
|
|
|
|
+ while( spielZeit < zeit )
|
|
|
|
+ tick();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void SpielKlasse::load()
|
|
|
|
+{
|
|
|
|
+ spielZeit = last.spielZeit;
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
- i->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
|
|
|
+ i->load();
|
|
|
|
+ for( auto i = schüsse->getIterator(); i; i++ )
|
|
|
|
+ i->load();
|
|
}
|
|
}
|
|
|
|
|
|
-void SpielKlasse::goToPresence()
|
|
|
|
|
|
+void SpielKlasse::save()
|
|
{
|
|
{
|
|
|
|
+ last.spielZeit = spielZeit;
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
for( auto i = spieler->getIterator(); i; i++ )
|
|
- i->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
|
|
|
+ i->save();
|
|
|
|
+ for( auto i = schüsse->getIterator(); i; i++ )
|
|
|
|
+ i->save();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void SpielKlasse::tick()
|
|
|
|
+{
|
|
|
|
+ spielZeit++;
|
|
|
|
+ kam->tick( TICK );
|
|
}
|
|
}
|
|
|
|
|
|
// nicht constant
|
|
// nicht constant
|
|
@@ -239,8 +271,6 @@ void SpielKlasse::ladeDaten()
|
|
bestenliste->setTeamAnzahl( map->getMaxTeamAnzahl() );
|
|
bestenliste->setTeamAnzahl( map->getMaxTeamAnzahl() );
|
|
welt->setSize( map->getSize().x, map->getSize().y );
|
|
welt->setSize( map->getSize().x, map->getSize().y );
|
|
welt->setSize( 1 );
|
|
welt->setSize( 1 );
|
|
- minimap->lookAtWorldPos( map->getSize() / 2 );
|
|
|
|
- minimap->lookAtWorldArea( map->getSize().x, map->getSize().y );
|
|
|
|
spielKlient->setLadenProzent( 100 );
|
|
spielKlient->setLadenProzent( 100 );
|
|
}
|
|
}
|
|
|
|
|
|
@@ -412,12 +442,16 @@ void SpielKlasse::stknVerarbeitung()
|
|
{
|
|
{
|
|
STKNachricht *n = stkn->z( i );
|
|
STKNachricht *n = stkn->z( i );
|
|
int zeit = n->getSpielZeit();
|
|
int zeit = n->getSpielZeit();
|
|
- if( zeit > spielZeit )
|
|
|
|
- break;
|
|
|
|
|
|
+ if( zeit > spielZeit )
|
|
|
|
+ {
|
|
|
|
+ chat->addNachricht( "Receved a message from the future.", 0xFFFF0000 );
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
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;
|
|
switch( bytes[ 0 ] )
|
|
switch( bytes[ 0 ] )
|
|
{
|
|
{
|
|
case 0: // spieler drückt gas
|
|
case 0: // spieler drückt gas
|
|
@@ -425,72 +459,78 @@ 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 )
|
|
i->setTastataturStatus( T_GAS, 1 );
|
|
i->setTastataturStatus( T_GAS, 1 );
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ 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;
|
|
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 )
|
|
i->setTastataturStatus( T_GAS, 0 );
|
|
i->setTastataturStatus( T_GAS, 0 );
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ 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;
|
|
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 )
|
|
i->setTastataturStatus( T_ROT_L, 1 );
|
|
i->setTastataturStatus( T_ROT_L, 1 );
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ 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;
|
|
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 )
|
|
i->setTastataturStatus( T_ROT_L, 0 );
|
|
i->setTastataturStatus( T_ROT_L, 0 );
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ 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;
|
|
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 )
|
|
i->setTastataturStatus( T_ROT_R, 1 );
|
|
i->setTastataturStatus( T_ROT_R, 1 );
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ 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;
|
|
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 )
|
|
i->setTastataturStatus( T_ROT_R, 0 );
|
|
i->setTastataturStatus( T_ROT_R, 0 );
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ goToPresence( presence );
|
|
break;
|
|
break;
|
|
case 6: // Init Spieler
|
|
case 6: // Init Spieler
|
|
if( 1 )
|
|
if( 1 )
|
|
@@ -499,6 +539,7 @@ 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;
|
|
@@ -544,6 +585,7 @@ 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 )
|
|
@@ -556,8 +598,10 @@ 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 );
|
|
csv.schreibe( "\n\nSpielernummer;Kills;Tode;Schaden gemacht;Schaden bekommen;Schüsse;Treffer\n", 2 );
|
|
csv.schreibe( "\n\nSpielernummer;Kills;Tode;Schaden gemacht;Schaden bekommen;Schüsse;Treffer\n", 2 );
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
{
|
|
{
|
|
@@ -599,6 +643,7 @@ 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 )
|
|
@@ -620,7 +665,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ goToPresence( presence );
|
|
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 )
|
|
@@ -657,6 +702,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
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 )
|
|
@@ -667,7 +713,10 @@ void SpielKlasse::stknVerarbeitung()
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ Laser *l = new Laser( id, Vec2< double >( xPos, yPos ), Vec2< double >( xSpeed, ySpeed ), sNum, intensität, farbe );
|
|
|
|
+ welt->addObject( l->getThis() );
|
|
|
|
+ schüsse->add( l );
|
|
|
|
+ goToPresence( presence );
|
|
if( sNum == spielerNummer )
|
|
if( sNum == spielerNummer )
|
|
{
|
|
{
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
@@ -680,11 +729,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- Laser *l = new Laser( id, Vec2< double >( xPos, yPos ), Vec2< double >( xSpeed, ySpeed ), sNum, intensität, farbe );
|
|
|
|
- for( int i = 0; i < spielZeit - zeit; i++ )
|
|
|
|
- l->tick( welt->getWorldInfo(), TICK );
|
|
|
|
- welt->addObject( l->getThis() );
|
|
|
|
- schüsse->add( l );
|
|
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case 0xE: // Treffer
|
|
case 0xE: // Treffer
|
|
@@ -697,6 +741,7 @@ 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++ )
|
|
for( auto tmp = schüsse->getIterator(); tmp; tmp++ )
|
|
{
|
|
{
|
|
if( tmp->getId() == schuss )
|
|
if( tmp->getId() == schuss )
|
|
@@ -721,9 +766,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
{
|
|
{
|
|
if( s->getSpielerNummer() == tmp->getSpieler() )
|
|
if( s->getSpielerNummer() == tmp->getSpieler() )
|
|
{
|
|
{
|
|
- s->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
|
s->machSchaden( intens );
|
|
s->machSchaden( intens );
|
|
- s->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
|
bestenliste->updateSpieler( s );
|
|
bestenliste->updateSpieler( s );
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -734,7 +777,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ goToPresence( presence );
|
|
if( sNum == spielerNummer )
|
|
if( sNum == spielerNummer )
|
|
{
|
|
{
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
@@ -755,6 +798,7 @@ 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 )
|
|
@@ -763,7 +807,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ goToPresence( presence );
|
|
if( sNum == spielerNummer )
|
|
if( sNum == spielerNummer )
|
|
{
|
|
{
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
@@ -787,6 +831,7 @@ 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 )
|
|
@@ -807,7 +852,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
bestenliste->updateSpieler( s );
|
|
bestenliste->updateSpieler( s );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- goToPresence();
|
|
|
|
|
|
+ goToPresence( presence );
|
|
if( sNum == spielerNummer )
|
|
if( sNum == spielerNummer )
|
|
{
|
|
{
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
@@ -844,24 +889,20 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
|
|
|
bool SpielKlasse::tick( double zeit )
|
|
bool SpielKlasse::tick( double zeit )
|
|
{
|
|
{
|
|
|
|
+ stknVerarbeitung();
|
|
if( spielPause )
|
|
if( spielPause )
|
|
{
|
|
{
|
|
zeit = 0;
|
|
zeit = 0;
|
|
- stknVerarbeitung();
|
|
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
rZeit += zeit;
|
|
rZeit += zeit;
|
|
while( TICK < rZeit )
|
|
while( TICK < rZeit )
|
|
{
|
|
{
|
|
rZeit -= TICK;
|
|
rZeit -= TICK;
|
|
- spielZeit++;
|
|
|
|
- stknVerarbeitung();
|
|
|
|
- if( end )
|
|
|
|
- return 1;
|
|
|
|
- int x = 0;
|
|
|
|
- int y = 0;
|
|
|
|
- bool setKam = 0;
|
|
|
|
|
|
+ if( end )
|
|
|
|
+ return 1;
|
|
lock();
|
|
lock();
|
|
|
|
+ // tote spieler
|
|
int deadsCount = deads->getEintragAnzahl();
|
|
int deadsCount = deads->getEintragAnzahl();
|
|
for( int i = 0; i < deadsCount; i++ )
|
|
for( int i = 0; i < deadsCount; i++ )
|
|
{
|
|
{
|
|
@@ -872,33 +913,43 @@ bool SpielKlasse::tick( double zeit )
|
|
deadsCount--;
|
|
deadsCount--;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- kam->tick( TICK );
|
|
|
|
|
|
+ // spiel fortschritt
|
|
|
|
+ tick();
|
|
minimap->tick( TICK );
|
|
minimap->tick( TICK );
|
|
|
|
+ // Kamera bewegen
|
|
|
|
+ Vertex tPos;
|
|
|
|
+ bool setKam = 0;
|
|
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 )
|
|
shipGUI->update( spieler->z( i ) );
|
|
shipGUI->update( spieler->z( i ) );
|
|
if( spielerNummer == spieler->z( i )->getSpielerNummer() )
|
|
if( spielerNummer == spieler->z( i )->getSpielerNummer() )
|
|
{
|
|
{
|
|
- x = (int)spieler->z( i )->getPosition().x;
|
|
|
|
- y = (int)spieler->z( i )->getPosition().y;
|
|
|
|
|
|
+ tPos = spieler->z( i )->getPosition();
|
|
setKam = spieler->z( i )->istAmLeben();
|
|
setKam = spieler->z( i )->istAmLeben();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
unlock();
|
|
unlock();
|
|
if( setKam )
|
|
if( setKam )
|
|
{
|
|
{
|
|
- float px = ( ( x - kam->getWorldPosition().x ) / 4.0f ) * (float)TICK;
|
|
|
|
- float py = ( ( y - kam->getWorldPosition().y ) / 4.0f ) * (float)TICK;
|
|
|
|
- /*if( abs( x - kam->getWorldPosition().x ) > abs( x - ( kam->getWorldPosition().x - map->getSize().x ) ) )
|
|
|
|
- px = ( ( x - ( kam->getWorldPosition().x - map->getSize().x ) ) / 4.0f ) * (float)TICK;
|
|
|
|
- else if( abs( x - kam->getWorldPosition().x ) > abs( x - ( kam->getWorldPosition().x + map->getSize().x ) ) )
|
|
|
|
- px = ( ( x - ( kam->getWorldPosition().x + map->getSize().x ) ) / 4.0f ) * (float)TICK;
|
|
|
|
- if( abs( y - kam->getWorldPosition().y ) > abs( y - ( kam->getWorldPosition().y - map->getSize().y ) ) )
|
|
|
|
- py = ( ( y - ( kam->getWorldPosition().y - map->getSize().y ) ) / 4.0f ) * (float)TICK;
|
|
|
|
- else if( abs( y - kam->getWorldPosition().y ) > abs( y - ( kam->getWorldPosition().y + map->getSize().y ) ) )
|
|
|
|
- py = ( ( y - ( kam->getWorldPosition().y + map->getSize().y ) ) / 4.0f ) * (float)TICK;*/
|
|
|
|
- kam->lookAtWorldPos( kam->getWorldPosition() + Vertex( px, py ) );
|
|
|
|
|
|
+ Vertex str = ( tPos - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos + welt->getWorldInfo().size - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos + welt->getWorldInfo().size - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos - welt->getWorldInfo().size - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos - welt->getWorldInfo().size - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos + Punkt( welt->getWorldInfo().size.x, 0 ) - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos + Punkt( welt->getWorldInfo().size.x, 0 ) - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos + Punkt( -welt->getWorldInfo().size.x, 0 ) - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos + Punkt( -welt->getWorldInfo().size.x, 0 ) - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos + Punkt( 0, welt->getWorldInfo().size.y ) - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos + Punkt( 0, welt->getWorldInfo().size.y ) - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos + Punkt( 0, -welt->getWorldInfo().size.y ) - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos + Punkt( 0, -welt->getWorldInfo().size.y ) - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos + Punkt( welt->getWorldInfo().size.x, -welt->getWorldInfo().size.y ) - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos + Punkt( welt->getWorldInfo().size.x, -welt->getWorldInfo().size.y ) - kam->getWorldPosition() );
|
|
|
|
+ if( ( tPos + Punkt( -welt->getWorldInfo().size.x, welt->getWorldInfo().size.y ) - kam->getWorldPosition() ).getLengthSq() < str.getLengthSq() )
|
|
|
|
+ str = ( tPos + Punkt( -welt->getWorldInfo().size.x, welt->getWorldInfo().size.y ) - kam->getWorldPosition() );
|
|
|
|
+ kam->lookAtWorldPos( kam->getWorldPosition() + str / 4.f * (float)TICK );
|
|
}
|
|
}
|
|
chat->tick( !zeit ? 0.05 : zeit );
|
|
chat->tick( !zeit ? 0.05 : zeit );
|
|
if( shipGUI )
|
|
if( shipGUI )
|
|
@@ -915,13 +966,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 );
|
|
- for( int j = 0; j < spielerAnzahl; j++ )
|
|
|
|
- spieler->z( j )->renderLeben( kam->getMatrix(), zRObj );
|
|
|
|
- int objektAnzahl = objekte->getEintragAnzahl();
|
|
|
|
- for( int i = 0; i < objektAnzahl; i++ )
|
|
|
|
- objekte->z( i )->renderLeben( kam->getMatrix(), zRObj );
|
|
|
|
zRObj.setAlpha( 50 );
|
|
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->lookAtWorldArea( welt->getWorldInfo().size.x, welt->getWorldInfo().size.y );
|
|
minimap->render( zRObj );
|
|
minimap->render( zRObj );
|
|
zRObj.releaseAlpha();
|
|
zRObj.releaseAlpha();
|
|
chat->render( zRObj );
|
|
chat->render( zRObj );
|