Răsfoiți Sursa

Absturtzt bei calcDeadPlayerObjekt behoben wenn der schuss bereits in dem objekt ist

Kolja Strohm 5 ani în urmă
părinte
comite
1f90fc0133
2 a modificat fișierele cu 36 adăugiri și 32 ștergeri
  1. 18 16
      Asteroids/Spiel/Objekt/SpielObjekt.cpp
  2. 18 16
      Asteroids/Spiel/Spieler/Spieler.cpp

+ 18 - 16
Asteroids/Spiel/Objekt/SpielObjekt.cpp

@@ -203,24 +203,26 @@ void SpielObjekt::calcDeadPlayerObject( Laser * zSchuss )
     Punkt pb;
     if( calcHitPoint( zSchuss->getPosition() - zSchuss->getSpeed(), zSchuss->getSpeed(), hp ) )
     {
-        zModel()->split( getObjectPos( hp ), getObjectDir( zSchuss->getSpeed() ) * 0.1f, "ship", a, b, pa, pb, []()
+        if( zModel()->split( getObjectPos( hp ), getObjectDir( zSchuss->getSpeed() ) * 0.1f, "ship", a, b, pa, pb, []()
         {
             return rand() / (double)RAND_MAX;
-        } );
-        hp = ( hp * getSize() ).rotation( getDrehung() ) + getPosition();
-        pa = pa.rotation( getDrehung() ) + getPosition();
-        pb = pb.rotation( getDrehung() ) + getPosition();
-        Array< Polygon2D > *npaA = new Array< Polygon2D >();
-        npaA->add( a );
-        Model2DData *npdA = new Model2DData();
-        npdA->erstelleModell( npaA );
-        Array< Polygon2D > *npaB = new Array< Polygon2D >();
-        npaB->add( b );
-        Model2DData *npdB = new Model2DData();
-        npdB->erstelleModell( npaB );
-        if( deadPlayer )
-            deadPlayer->release();
-        deadPlayer = new DeadPlayer( npdA, npdB, pa, pb, getSpeed() * ( rand() / (float)RAND_MAX ), getSpeed() * ( rand() / (float)RAND_MAX ), getDrehung(), getDrehung(), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), zTextur( "ship" ) );
+        } ) )
+        {
+            hp = ( hp * getSize() ).rotation( getDrehung() ) + getPosition();
+            pa = pa.rotation( getDrehung() ) + getPosition();
+            pb = pb.rotation( getDrehung() ) + getPosition();
+            Array< Polygon2D > *npaA = new Array< Polygon2D >();
+            npaA->add( a );
+            Model2DData *npdA = new Model2DData();
+            npdA->erstelleModell( npaA );
+            Array< Polygon2D > *npaB = new Array< Polygon2D >();
+            npaB->add( b );
+            Model2DData *npdB = new Model2DData();
+            npdB->erstelleModell( npaB );
+            if( deadPlayer )
+                deadPlayer->release();
+            deadPlayer = new DeadPlayer( npdA, npdB, pa, pb, getSpeed() * ( rand() / (float)RAND_MAX ), getSpeed() * ( rand() / (float)RAND_MAX ), getDrehung(), getDrehung(), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), zTextur( "ship" ) );
+        }
     }
 }
 

+ 18 - 16
Asteroids/Spiel/Spieler/Spieler.cpp

@@ -610,24 +610,26 @@ void Spieler::calcDeadPlayerObject( Laser * zSchuss )
     Punkt pb;
     if( calcHitPoint( zSchuss->getPosition() - zSchuss->getSpeed(), zSchuss->getSpeed(), hp ) )
     {
-        zModel()->split( getObjectPos( hp ), getObjectDir( zSchuss->getSpeed() ) * 0.1f, "ship", a, b, pa, pb, []()
+        if( zModel()->split( getObjectPos( hp ), getObjectDir( zSchuss->getSpeed() ) * 0.1f, "ship", a, b, pa, pb, []()
         {
             return rand() / (double)RAND_MAX;
-        } );
-        hp = ( hp * getSize() ).rotation( getDrehung() ) + getPosition();
-        pa = pa.rotation( getDrehung() ) + getPosition();
-        pb = pb.rotation( getDrehung() ) + getPosition();
-        Array< Polygon2D > *npaA = new Array< Polygon2D >();
-        npaA->add( a );
-        Model2DData *npdA = new Model2DData();
-        npdA->erstelleModell( npaA );
-        Array< Polygon2D > *npaB = new Array< Polygon2D >();
-        npaB->add( b );
-        Model2DData *npdB = new Model2DData();
-        npdB->erstelleModell( npaB );
-        if( deadPlayer )
-            deadPlayer->release();
-        deadPlayer = new DeadPlayer( npdA, npdB, pa, pb, getSpeed() * ( rand() / (float)RAND_MAX ), getSpeed() * ( rand() / (float)RAND_MAX ), getDrehung(), getDrehung(), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), zTextur( "ship" ) );
+        } ) )
+        {
+            hp = ( hp * getSize() ).rotation( getDrehung() ) + getPosition();
+            pa = pa.rotation( getDrehung() ) + getPosition();
+            pb = pb.rotation( getDrehung() ) + getPosition();
+            Array< Polygon2D > *npaA = new Array< Polygon2D >();
+            npaA->add( a );
+            Model2DData *npdA = new Model2DData();
+            npdA->erstelleModell( npaA );
+            Array< Polygon2D > *npaB = new Array< Polygon2D >();
+            npaB->add( b );
+            Model2DData *npdB = new Model2DData();
+            npdB->erstelleModell( npaB );
+            if( deadPlayer )
+                deadPlayer->release();
+            deadPlayer = new DeadPlayer( npdA, npdB, pa, pb, getSpeed() * ( rand() / (float)RAND_MAX ), getSpeed() * ( rand() / (float)RAND_MAX ), getDrehung(), getDrehung(), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), zTextur( "ship" ) );
+        }
     }
 }