Browse Source

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

Kolja Strohm 5 years ago
parent
commit
27166870f5
2 changed files with 8 additions and 4 deletions
  1. 2 1
      Asteroids/Spiel/SpielKlasse.cpp
  2. 6 3
      Asteroids/Spiel/Spieler/Spieler.cpp

+ 2 - 1
Asteroids/Spiel/SpielKlasse.cpp

@@ -757,7 +757,8 @@ void SpielKlasse::stknVerarbeitung()
 								{
                                     intens = tmp->getIntensität( s->getSpeed() );
 									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 );
                                     s->calcDeadPlayerObject( schüsse->z( i ) );
 									bestenliste->updateSpieler( s );
                                     break;

+ 6 - 3
Asteroids/Spiel/Spieler/Spieler.cpp

@@ -259,7 +259,8 @@ bool Spieler::tick( const WeltInfo &info, double tv )
             float factor = 1;
             if( treibstoff > energie )
                 factor = (float)( energie / treibstoff );
-            impuls( getWorldPos( stM ), getWorldDir( kM ) * (float)tv * (float)( beschleunigung + team->beschleunigung ) * factor );
+            if( factor > 0 )
+                impuls( getWorldPos( stM ), getWorldDir( kM ) * (float)tv * (float)( beschleunigung + team->beschleunigung ) * factor );
             energie -= treibstoff * factor;
         }
         if( tastatur[ T_ROT_R ] )
@@ -270,7 +271,8 @@ bool Spieler::tick( const WeltInfo &info, double tv )
             float factor = 1;
             if( treibstoff > energie )
                 factor = (float)( energie / treibstoff );
-            impuls( getWorldPos( stL ), getWorldDir( kL ) * (float)tv * (float)( wendigkeit + team->wendigkeit ) * factor );
+            if( factor > 0 )
+                impuls( getWorldPos( stL ), getWorldDir( kL ) * (float)tv * (float)( wendigkeit + team->wendigkeit ) * factor );
             energie -= treibstoff * factor;
         }
         if( tastatur[ T_ROT_L ] )
@@ -281,7 +283,8 @@ bool Spieler::tick( const WeltInfo &info, double tv )
             float factor = 1;
             if( treibstoff > energie )
                 factor = (float)( energie / treibstoff );
-            impuls( getWorldPos( stR ), getWorldDir( kR ) * (float)tv * (float)( wendigkeit + team->wendigkeit ) * factor );
+            if( factor > 0 )
+                impuls( getWorldPos( stR ), getWorldDir( kR ) * (float)tv * (float)( wendigkeit + team->wendigkeit ) * factor );
             energie -= treibstoff * factor;
         }
         __super::tick( info, tv );