ソースを参照

Geschosse werden nun mittig vom Spieler plaziert

Kolja Strohm 5 年 前
コミット
a97f51bb72

+ 10 - 0
StickmanWorldOnline/Geschoss.cpp

@@ -5,6 +5,8 @@
 Geschoss::Geschoss( int id, float speed, GeschossTyp typ, Richtung r, int x, int y, Spieler *besitzer )
     : GameObject( GESCHOSS, x, y, 15, 15 )
 {
+    setX( getX() - 15.f / 2 );
+    setY( getY() - 15.f / 2 );
     this->speed = speed;
     this->richtung = r;
     this->besitzer = besitzer;
@@ -70,22 +72,30 @@ void Geschoss::setTyp( GeschossTyp typ )
     {
         if( richtung == OBEN || richtung == UNTEN )
         {
+            setX( getX() + getWidth() / 2 - 7.f / 2 );
+            setY( getY() + getHeight() / 2 - 15 );
             setWidth( 7 );
             setHeight( 30 );
         }
         else
         {
+            setX( getX() + getWidth() / 2 - 15 );
+            setY( getY() + getHeight() / 2 - 7.f / 2 );
             setWidth( 30 );
             setHeight( 7 );
         }
     }
     else if( typ == GESCHOSS_FEUERBALL )
     {
+        setX( getX() + getWidth() / 2 - 10 );
+        setY( getY() + getHeight() / 2 - 10 );
         setWidth( 20 );
         setHeight( 20 );
     }
     else
     {
+        setX( getX() + getWidth() / 2 - 15.f / 2 );
+        setY( getY() + getHeight() / 2 - 15.f / 2 );
         setWidth( 15 );
         setHeight( 15 );
     }

+ 1 - 1
StickmanWorldOnline/Spiel.cpp

@@ -700,7 +700,7 @@ void Spiel::tick( double zeit )
                                 s->addEffekt( new DrachenAugeEffect( g->zBesitzer(), s._ ) );
                                 break;
                             case GESCHOSS_FEUERBALL:
-                                feuer.add( new FeuerballTreffer( ++nextId, (int)g->getX() - 70, (int)g->getY() - 70, g->getBesitzer(), 10 ) );
+                                feuer.add( new FeuerballTreffer( ++nextId, (int)g->getX() - (int)g->getWidth() / 2, (int)g->getY() - (int)g->getHeight() / 2, g->getBesitzer(), 10 ) );
                                 break;
                             case GESCHOSS_MINE:
                                 for( auto s2 = spieler.getIterator(); s2; s2++ )

+ 5 - 5
StickmanWorldOnline/Spieler.cpp

@@ -458,7 +458,7 @@ void Spieler::useItem( Spiel *zSpiel )
         case PFEIL:
             geschosseGeschossen++;
             zSpiel->setSpielerZuletztGeschossen( (Spieler *)getThis() );
-            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_PFEIL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
+            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_PFEIL, getAusrichtung(), (int)x + (int)getWidth() / 2, (int)y + (int)getHeight() / 2, (Spieler *)getThis() ) );
             break;
         case LEBEN:
             addEffekt( new LebenEffect( this ) );
@@ -475,7 +475,7 @@ void Spieler::useItem( Spiel *zSpiel )
         case KUGEL:
             geschosseGeschossen++;
             zSpiel->setSpielerZuletztGeschossen( (Spieler *)getThis() );
-            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_KUGEL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
+            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_KUGEL, getAusrichtung(), (int)x + (int)getWidth() / 2, (int)y + (int)getHeight() / 2, (Spieler *)getThis() ) );
             break;
         case ROLLE:
             addEffekt( new RolleEffect( this, getAusrichtung() ) );
@@ -486,12 +486,12 @@ void Spieler::useItem( Spiel *zSpiel )
         case DRACHENAUGE:
             geschosseGeschossen++;
             zSpiel->setSpielerZuletztGeschossen( (Spieler *)getThis() );
-            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_DRACHENAUGE, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
+            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_DRACHENAUGE, getAusrichtung(), (int)x + (int)getWidth() / 2, (int)y + (int)getHeight() / 2, (Spieler *)getThis() ) );
             break;
         case FEUERBALL:
             geschosseGeschossen++;
             zSpiel->setSpielerZuletztGeschossen( (Spieler *)getThis() );
-            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_FEUERBALL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
+            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_FEUERBALL, getAusrichtung(), (int)x + (int)getWidth() / 2, (int)y + (int)getHeight() / 2, (Spieler *)getThis() ) );
             break;
         case ENTERHAKEN:
             addEffekt( new EnterhakenEffect( this, getAusrichtung() ) );
@@ -499,7 +499,7 @@ void Spieler::useItem( Spiel *zSpiel )
         case MINE:
             geschosseGeschossen++;
             zSpiel->setSpielerZuletztGeschossen( (Spieler *)getThis() );
-            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), 0, GESCHOSS_MINE, MITTE, (int)x, (int)y, (Spieler *)getThis() ) );
+            zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), 0, GESCHOSS_MINE, MITTE, (int)x + (int)getWidth() / 2, (int)y + (int)getHeight() / 2, (Spieler *)getThis() ) );
             break;
         default:
             break;