Browse Source

Fehler behoben der einen ungültigen impuls verursachte, wodurch die spieler positionen zu nan gesetzt wurden

Kolja Strohm 6 years ago
parent
commit
eb6b3d420c
2 changed files with 9 additions and 5 deletions
  1. 2 1
      Asteroids/Spiel.cpp
  2. 7 4
      Asteroids/Spieler.cpp

+ 2 - 1
Asteroids/Spiel.cpp

@@ -379,7 +379,8 @@ void Spiel::tick( double zeit )
 					{ // Treffer
                         double intens = tmp->getIntensity() * ( ( tmp->getSpeed() - s->getSpeed() ).getLength() / 200 );
 						bool kill = s->nimmSchaden( intens );
-                        s->impuls( tmp->getPosition() - tmp->getSpeed(), tmp->getSpeed() * 0.3f );
+                        if( tmp->getSpeed().getLengthSq() > 0 )
+                            s->impuls( tmp->getPosition() - tmp->getSpeed(), tmp->getSpeed() * 0.3f );
 						for( int k = 0; k < spielerAnzahl; k++ )
 						{
 							Spieler *sp = spieler->z( k );

+ 7 - 4
Asteroids/Spieler.cpp

@@ -200,8 +200,9 @@ bool Spieler::tick( const WeltInfo& info, double zeit )
             treibstoffVerbraucht += treibstoff;
             float factor = 1;
             if( treibstoff > energie )
-                factor = (float)(energie / treibstoff);
-            impuls( getWorldPos( stM ), getWorldDir( kM ) * (float)zeit * (float)( beschleunigung + team->beschleunigung ) * factor );
+                factor = (float)( energie / treibstoff );
+            if( factor > 0 )
+                impuls( getWorldPos( stM ), getWorldDir( kM ) * (float)zeit * (float)( beschleunigung + team->beschleunigung ) * factor );
             energie -= treibstoff * factor;
         }
         if( tastatur[ T_ROT_R ] )
@@ -212,7 +213,8 @@ bool Spieler::tick( const WeltInfo& info, double zeit )
             float factor = 1;
             if( treibstoff > energie )
                 factor = (float)( energie / treibstoff );
-            impuls( getWorldPos( stL ), getWorldDir( kL ) * (float)zeit * (float)( wendigkeit + team->wendigkeit ) * factor );
+            if( factor > 0 )
+                impuls( getWorldPos( stL ), getWorldDir( kL ) * (float)zeit * (float)( wendigkeit + team->wendigkeit ) * factor );
             energie -= treibstoff * factor;
         }
         if( tastatur[ T_ROT_L ] )
@@ -223,7 +225,8 @@ bool Spieler::tick( const WeltInfo& info, double zeit )
             float factor = 1;
             if( treibstoff > energie )
                 factor = (float)( energie / treibstoff );
-            impuls( getWorldPos( stR ), getWorldDir( kR ) * (float)zeit * (float)( wendigkeit + team->wendigkeit ) * factor );
+            if( factor > 0 )
+                impuls( getWorldPos( stR ), getWorldDir( kR ) * (float)zeit * (float)( wendigkeit + team->wendigkeit ) * factor );
             energie -= treibstoff * factor;
         }
         Model2DObject::tick( info, zeit );