|
@@ -102,6 +102,18 @@ bool SpielKlasse::istAmLeben() const
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+void SpielKlasse::goBackInTime( int zeit )
|
|
|
+{
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
+ i->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
+}
|
|
|
+
|
|
|
+void SpielKlasse::goToPresence()
|
|
|
+{
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
+ i->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
+}
|
|
|
+
|
|
|
// nicht constant
|
|
|
void SpielKlasse::lock()
|
|
|
{
|
|
@@ -227,6 +239,7 @@ void SpielKlasse::ladeDaten()
|
|
|
bestenliste->setTeamAnzahl( map->getMaxTeamAnzahl() );
|
|
|
welt->setSize( map->getSize().x, map->getSize().y );
|
|
|
welt->setSize( 1 );
|
|
|
+ minimap->lookAtWorldPos( map->getSize() / 2 );
|
|
|
minimap->lookAtWorldArea( map->getSize().x, map->getSize().y );
|
|
|
spielKlient->setLadenProzent( 100 );
|
|
|
}
|
|
@@ -411,61 +424,73 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
bytes++;
|
|
|
sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
{
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
- spieler->z( i )->setTastataturStatus( T_GAS, 1, zeit, welt->getWorldInfo() );
|
|
|
+ if( i->getSpielerNummer() == sNum )
|
|
|
+ i->setTastataturStatus( T_GAS, 1 );
|
|
|
}
|
|
|
+ goToPresence();
|
|
|
break;
|
|
|
case 1: // spieler lässt gas los
|
|
|
bytes++;
|
|
|
sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
- {
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
- spieler->z( i )->setTastataturStatus( T_GAS, 0, zeit, welt->getWorldInfo() );
|
|
|
- }
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
+ {
|
|
|
+ if( i->getSpielerNummer() == sNum )
|
|
|
+ i->setTastataturStatus( T_GAS, 0 );
|
|
|
+ }
|
|
|
+ goToPresence();
|
|
|
break;
|
|
|
case 2: // spieler drückt rotl
|
|
|
bytes++;
|
|
|
sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
- {
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
- spieler->z( i )->setTastataturStatus( T_ROT_L, 1, zeit, welt->getWorldInfo() );
|
|
|
- }
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
+ {
|
|
|
+ if( i->getSpielerNummer() == sNum )
|
|
|
+ i->setTastataturStatus( T_ROT_L, 1 );
|
|
|
+ }
|
|
|
+ goToPresence();
|
|
|
break;
|
|
|
case 3: // spieler lässt rotl los
|
|
|
bytes++;
|
|
|
sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
- {
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
- spieler->z( i )->setTastataturStatus( T_ROT_L, 0, zeit, welt->getWorldInfo() );
|
|
|
- }
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
+ {
|
|
|
+ if( i->getSpielerNummer() == sNum )
|
|
|
+ i->setTastataturStatus( T_ROT_L, 0 );
|
|
|
+ }
|
|
|
+ goToPresence();
|
|
|
break;
|
|
|
case 4: // spieler drückt rotr
|
|
|
bytes++;
|
|
|
sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
- {
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
- spieler->z( i )->setTastataturStatus( T_ROT_R, 1, zeit, welt->getWorldInfo() );
|
|
|
- }
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
+ {
|
|
|
+ if( i->getSpielerNummer() == sNum )
|
|
|
+ i->setTastataturStatus( T_ROT_R, 1 );
|
|
|
+ }
|
|
|
+ goToPresence();
|
|
|
break;
|
|
|
case 5: // spieler lässt rotr los
|
|
|
bytes++;
|
|
|
sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
- {
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
- spieler->z( i )->setTastataturStatus( T_ROT_R, 0, zeit, welt->getWorldInfo() );
|
|
|
- }
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto i = spieler->getIterator(); i; i++ )
|
|
|
+ {
|
|
|
+ if( i->getSpielerNummer() == sNum )
|
|
|
+ i->setTastataturStatus( T_ROT_R, 0 );
|
|
|
+ }
|
|
|
+ goToPresence();
|
|
|
break;
|
|
|
case 6: // Init Spieler
|
|
|
if( 1 )
|
|
@@ -487,7 +512,6 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
teams->set( map->createTeam( map->getTeamNummer( sNum ) ), map->getTeamNummer( sNum ) );
|
|
|
tmp->setTeam( teams->get( map->getTeamNummer( sNum ) ) );
|
|
|
tmp->zTeam()->spieler->add( (Spieler*)tmp->getThis() );
|
|
|
- spieler->add( tmp );
|
|
|
bestenliste->addSpieler( tmp );
|
|
|
bestenliste->updateSpieler( tmp );
|
|
|
bestenliste->updateTeam( tmp->zTeam() );
|
|
@@ -497,6 +521,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
{
|
|
|
if( !spieler->z( i )->zTeam() )
|
|
|
{
|
|
|
+ welt->removeObject( spieler->z( i ) );
|
|
|
spieler->remove( i );
|
|
|
i--;
|
|
|
max--;
|
|
@@ -573,13 +598,12 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
line += art;
|
|
|
line += "\n";
|
|
|
csv.schreibe( line, line.getLength() );
|
|
|
+ goBackInTime( zeit );
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
{
|
|
|
if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
{
|
|
|
Team *tmp = spieler->z( i )->zTeam();
|
|
|
- for( auto j = tmp->spieler->getIterator(); j && j._; j++ )
|
|
|
- j->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
spieler->z( i )->setSkill( art );
|
|
|
tmp->akkuLeistung = tmp->getAkkuLeistungBonus();
|
|
|
tmp->beschleunigung = tmp->getBeschleunigungBonus();
|
|
@@ -593,11 +617,10 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
tmp->antriebEffizienz = tmp->getAntriebEffizienzBonus();
|
|
|
tmp->energieSchild = tmp->getEnergieSchildBonus();
|
|
|
tmp->energieSchildEffizienz = tmp->getEnergieSchildEffizienzBonus();
|
|
|
- for( auto j = tmp->spieler->getIterator(); j && j._; j++ )
|
|
|
- j->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ goToPresence();
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
{
|
|
|
if( spieler->z( i )->getSpielerNummer() == spielerNummer )
|
|
@@ -633,18 +656,18 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
double intensität = *(double*)bytes;
|
|
|
län -= 8;
|
|
|
int farbe = 0;
|
|
|
+ goBackInTime( zeit );
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
{
|
|
|
if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
{
|
|
|
- spieler->z( i )->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
spieler->z( i )->setPosition( Vec2< double >( xPos, yPos ) );
|
|
|
spieler->z( i )->hatGeschossen();
|
|
|
farbe = spieler->z( i )->zTeam()->farbe;
|
|
|
- spieler->z( i )->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ goToPresence();
|
|
|
if( sNum == spielerNummer )
|
|
|
{
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
@@ -673,46 +696,35 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
län -= 4;
|
|
|
int sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- int anz = schüsse->getEintragAnzahl();
|
|
|
- for( int i = 0; i < anz; i++ )
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto tmp = schüsse->getIterator(); tmp; tmp++ )
|
|
|
{
|
|
|
- if( schüsse->z( i )->getId() == schuss )
|
|
|
+ if( tmp->getId() == schuss )
|
|
|
{
|
|
|
- Laser *tmp = schüsse->z( i );
|
|
|
- if( zeit > spielZeit )
|
|
|
- {
|
|
|
- for( int i = 0; i < zeit - spielZeit; i++ )
|
|
|
- tmp->tick( welt->getWorldInfo(), TICK );
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- for( int i = 0; i < spielZeit - zeit; i++ )
|
|
|
- tmp->tick( welt->getWorldInfo(), -TICK );
|
|
|
- }
|
|
|
+ for( int i = 0; i < spielZeit - zeit; i++ )
|
|
|
+ tmp->tick( welt->getWorldInfo(), -TICK );
|
|
|
if( sNum >= 0 )
|
|
|
{
|
|
|
double intens = 0;
|
|
|
- for( int j = 0; j < spielerAnzahl; j++ )
|
|
|
+ for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
- if( spieler->z( j )->getSpielerNummer() == sNum )
|
|
|
+ if( s->getSpielerNummer() == sNum )
|
|
|
{
|
|
|
- spieler->z( j )->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
- intens = tmp->getIntensität( spieler->z( j )->getSpeed() );
|
|
|
- spieler->z( j )->nimmSchaden( intens );
|
|
|
- spieler->z( j )->calcDeadPlayerObject( schüsse->z( i ) );
|
|
|
- spieler->z( j )->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
- bestenliste->updateSpieler( spieler->z( j ) );
|
|
|
+ intens = tmp->getIntensität( s->getSpeed() );
|
|
|
+ s->nimmSchaden( intens );
|
|
|
+ s->calcDeadPlayerObject( schüsse->z( i ) );
|
|
|
+ bestenliste->updateSpieler( s );
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- for( int j = 0; j < spielerAnzahl; j++ )
|
|
|
+ for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
- if( spieler->z( j )->getSpielerNummer() == tmp->getSpieler() )
|
|
|
+ if( s->getSpielerNummer() == tmp->getSpieler() )
|
|
|
{
|
|
|
- spieler->z( j )->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
- spieler->z( j )->machSchaden( intens );
|
|
|
- spieler->z( j )->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
- bestenliste->updateSpieler( spieler->z( j ) );
|
|
|
+ s->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
+ s->machSchaden( intens );
|
|
|
+ s->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
+ bestenliste->updateSpieler( s );
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -722,13 +734,14 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ goToPresence();
|
|
|
if( sNum == spielerNummer )
|
|
|
{
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
+ for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
- if( spieler->z( i )->getSpielerNummer() == spielerNummer )
|
|
|
+ if( s->getSpielerNummer() == spielerNummer )
|
|
|
{
|
|
|
- shipGUI->update( spieler->z( i ) );
|
|
|
+ shipGUI->update( s );
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -741,23 +754,23 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
bytes++;
|
|
|
int sNum = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
+ if( s->getSpielerNummer() == sNum )
|
|
|
{
|
|
|
- spieler->z( i )->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
- spieler->z( i )->wiederbelebung();
|
|
|
- spieler->z( i )->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
+ s->wiederbelebung();
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ goToPresence();
|
|
|
if( sNum == spielerNummer )
|
|
|
{
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
+ for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
- if( spieler->z( i )->getSpielerNummer() == spielerNummer )
|
|
|
+ if( s->getSpielerNummer() == spielerNummer )
|
|
|
{
|
|
|
- shipGUI->update( spieler->z( i ) );
|
|
|
+ shipGUI->update( s );
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -773,30 +786,28 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
län -= 4;
|
|
|
int killer = *(int*)bytes;
|
|
|
län -= 4;
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
+ goBackInTime( zeit );
|
|
|
+ for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
- if( spieler->z( i )->getSpielerNummer() == sNum )
|
|
|
+ if( s->getSpielerNummer() == sNum )
|
|
|
{
|
|
|
- spieler->z( i )->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
- DeadPlayer *dp = spieler->z( i )->sterben();
|
|
|
+ DeadPlayer *dp = s->sterben();
|
|
|
if( dp )
|
|
|
{
|
|
|
welt->addObject( dp->getThis() );
|
|
|
deads->add( dp );
|
|
|
}
|
|
|
- spieler->z( i )->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
- bestenliste->updateSpieler( spieler->z( i ) );
|
|
|
+ bestenliste->updateSpieler( s );
|
|
|
}
|
|
|
- if( spieler->z( i )->getSpielerNummer() == killer )
|
|
|
+ if( s->getSpielerNummer() == killer )
|
|
|
{
|
|
|
- spieler->z( i )->resetToSaveTime( zeit, welt->getWorldInfo() );
|
|
|
- spieler->z( i )->addKill();
|
|
|
- spieler->z( i )->resetToGameTime( spielZeit, welt->getWorldInfo() );
|
|
|
- spieler->z( i )->zTeam()->punkte++;
|
|
|
- bestenliste->updateTeam( spieler->z( i )->zTeam() );
|
|
|
- bestenliste->updateSpieler( spieler->z( i ) );
|
|
|
+ s->addKill();
|
|
|
+ s->zTeam()->punkte++;
|
|
|
+ bestenliste->updateTeam( s->zTeam() );
|
|
|
+ bestenliste->updateSpieler( s );
|
|
|
}
|
|
|
}
|
|
|
+ goToPresence();
|
|
|
if( sNum == spielerNummer )
|
|
|
{
|
|
|
for( int i = 0; i < spielerAnzahl; i++ )
|
|
@@ -840,10 +851,8 @@ bool SpielKlasse::tick( double zeit )
|
|
|
return 1;
|
|
|
}
|
|
|
rZeit += zeit;
|
|
|
- double sZ = 0;
|
|
|
- while( sZ + TICK < rZeit )
|
|
|
+ while( TICK < rZeit )
|
|
|
{
|
|
|
- sZ += TICK;
|
|
|
rZeit -= TICK;
|
|
|
spielZeit++;
|
|
|
stknVerarbeitung();
|
|
@@ -856,7 +865,7 @@ bool SpielKlasse::tick( double zeit )
|
|
|
int deadsCount = deads->getEintragAnzahl();
|
|
|
for( int i = 0; i < deadsCount; i++ )
|
|
|
{
|
|
|
- if( deads->z( i )->tick( welt->getWorldInfo(), 0 ) )
|
|
|
+ if( deads->z( i )->isFinished() )
|
|
|
{
|
|
|
welt->removeObject( deads->z( i ) );
|
|
|
deads->remove( i-- );
|
|
@@ -879,16 +888,16 @@ bool SpielKlasse::tick( double zeit )
|
|
|
unlock();
|
|
|
if( setKam )
|
|
|
{
|
|
|
- float px = ( ( x - kam->getPosition().x ) / 100.0f ) * ( abs( ( x - kam->getPosition().x ) / 2 ) * (float)TICK );
|
|
|
- float py = ( ( y - kam->getPosition().y ) / 100.0f ) * ( abs( ( y - kam->getPosition().y ) / 2 ) * (float)TICK );
|
|
|
- if( abs( x - kam->getPosition().x ) > abs( x - ( kam->getPosition().x - map->getSize().x ) ) )
|
|
|
- px = ( ( x - ( kam->getPosition().x - map->getSize().x ) ) / 100.0f ) * ( abs( ( x - kam->getPosition().x ) / 2 ) * (float)TICK );
|
|
|
- else if( abs( x - kam->getPosition().x ) > abs( x - ( kam->getPosition().x + map->getSize().x ) ) )
|
|
|
- px = ( ( x - ( kam->getPosition().x + map->getSize().x ) ) / 100.0f ) * ( abs( ( x - kam->getPosition().x ) / 2 ) * (float)TICK );
|
|
|
- if( abs( y - kam->getPosition().y ) > abs( y - ( kam->getPosition().y - map->getSize().y ) ) )
|
|
|
- py = ( ( y - ( kam->getPosition().y - map->getSize().y ) ) / 100.0f ) * ( abs( ( y - kam->getPosition().y ) / 2 ) * (float)TICK );
|
|
|
- else if( abs( y - kam->getPosition().y ) > abs( y - ( kam->getPosition().y + map->getSize().y ) ) )
|
|
|
- py = ( ( y - ( kam->getPosition().y + map->getSize().y ) ) / 100.0f ) * ( abs( ( y - kam->getPosition().y ) / 2 ) * (float)TICK );
|
|
|
+ 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 ) );
|
|
|
}
|
|
|
chat->tick( !zeit ? 0.05 : zeit );
|