Quellcode durchsuchen

Gegenstände fertig

Kolja Strohm vor 4 Jahren
Ursprung
Commit
632fcd9900

+ 1 - 1
StickmanWorldOnline/BosheitRune.cpp

@@ -3,7 +3,7 @@
 
 
 BosheitRuneEffect::BosheitRuneEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)(75.f + (75.f / 100.f) * zSpieler->getAbklingZeitVerringerung()))
+    : Effect( zSpieler, 75.f + ( 75.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     zSpieler->setSchadenBonus( zSpieler->getSchadenBonus() + 7 );
     zSpieler->setLebensRaub( zSpieler->getLebensRaub() + 3 );

+ 2 - 2
StickmanWorldOnline/Effect.cpp

@@ -1,7 +1,7 @@
 #include "Effect.h"
 
 
-Effect::Effect( Spieler *zSpieler, int maxTime )
+Effect::Effect( Spieler *zSpieler, float maxTime )
 {
     this->zSpieler = zSpieler;
     timeLeft = maxTime;
@@ -13,7 +13,7 @@ Effect::~Effect()
 
 bool Effect::tick( double time, Spiel *zSpiel )
 {
-    timeLeft -= time;
+    timeLeft -= (float)time;
     return timeLeft <= 0;
 }
 

+ 2 - 2
StickmanWorldOnline/Effect.h

@@ -10,11 +10,11 @@ class Effect
 {
 protected:
     Spieler *zSpieler;
-    double timeLeft;
+    float timeLeft;
     int ref;
 
 public:
-    Effect( Spieler *zSpieler, int maxTime );
+    Effect( Spieler *zSpieler, float maxTime );
     virtual ~Effect();
     virtual bool tick( double time, Spiel *zSpiel );
     virtual bool istSpielerBeweglich( Richtung r );

+ 165 - 0
StickmanWorldOnline/Enterhaken.cpp

@@ -0,0 +1,165 @@
+#include "Enterhaken.h"
+#include "Spieler.h"
+#include "Spiel.h"
+
+EnterhakenEffect::EnterhakenEffect( Spieler *zSpieler, Richtung r )
+    : Effect( zSpieler, 1.5f + ( 1.5f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
+{
+    maxTime = timeLeft;
+    state = 0;
+    ehpx = zSpieler->getX() + zSpieler->getWidth() / 2;
+    ehpy = zSpieler->getY() + zSpieler->getHeight() / 2;
+}
+
+EnterhakenEffect::~EnterhakenEffect()
+{}
+
+bool EnterhakenEffect::istSpielerBeweglich( Richtung r )
+{
+    return 0;
+}
+
+void EnterhakenEffect::move( double time )
+{
+    if( time < 0 )
+        return;
+    if( state == 3 || state == 4 )
+    {
+        switch( r )
+        {
+        case OBEN:
+            zSpieler->setY( zSpieler->getY() - 200 * (float)time );
+            if( zSpieler->getY() <= ehpy - 10 )
+                state = 4;
+            break;
+        case LINKS:
+            zSpieler->setX( zSpieler->getX() - 200 * (float)time );
+            if( zSpieler->getX() <= ehpx - 10 )
+                state = 4;
+            break;
+        case UNTEN:
+            zSpieler->setY( zSpieler->getY() + 200 * (float)time );
+            if( zSpieler->getY() >= ehpy - 10 )
+                state = 4;
+            break;
+        case RECHTS:
+            zSpieler->setX( zSpieler->getX() + 200 * (float)time );
+            if( zSpieler->getX() >= ehpx - 10 )
+                state = 4;
+            break;
+        default:
+            break;
+        }
+        if( state == 4 )
+        {
+            if( !target->hatStyle( Bariere::Style::Aktiv ) || !target->intersectsWith( zSpieler ) )
+                state = 5;
+        }
+    }
+}
+
+bool EnterhakenEffect::tick( double time, Spiel * zSpiel )
+{
+    switch( state )
+    {
+    case 0:
+        switch( r )
+        {
+        case OBEN:
+            ehpy -= 200 * (float)time;
+            break;
+        case LINKS:
+            ehpx -= 200 * (float)time;
+            break;
+        case UNTEN:
+            ehpy += 200 * (float)time;
+            break;
+        case RECHTS:
+            ehpx += 200 * (float)time;
+            break;
+        default:
+            break;
+        }
+        timeLeft -= (float)time;
+        if( timeLeft <= 0 )
+        {
+            state = 1;
+            timeLeft = maxTime;
+        }
+        for( auto s = zSpiel->getSpieler(); s; s++ )
+        {
+            if( s->zTeam() != zSpieler->zTeam() && s->getX() <= ehpx - 10 && s->getX() + s->getWidth() > ehpx + 10 && s->getY() <= ehpy - 10 && s->getY() + s->getWidth() > ehpy + 10 )
+                s->nimmSchaden( 150 * (float)time, zSpieler, r, zSpiel );
+        }
+        for( auto b = zSpiel->getBarieren(); b; b++ )
+        {
+            if( b->hatStyle( Bariere::Style::Aktiv ) && (!b->zTeam() || b->zTeam() == zSpieler->zTeam()) )
+            {
+                if( b->getX() <= ehpx - 10 && b->getX() + b->getWidth() > ehpx + 10 && b->getY() <= ehpy - 10 && b->getY() + b->getWidth() > ehpy + 10 )
+                {
+                    target = b;
+                    state = 2;
+                }
+            }
+        }
+        break;
+    case 1:
+        switch( r )
+        {
+        case OBEN:
+            ehpy += 200 * (float)time;
+            break;
+        case LINKS:
+            ehpx += 200 * (float)time;
+            break;
+        case UNTEN:
+            ehpy -= 200 * (float)time;
+            break;
+        case RECHTS:
+            ehpx -= 200 * (float)time;
+            break;
+        default:
+            break;
+        }
+        for( auto s = zSpiel->getSpieler(); s; s++ )
+        {
+            if( s->zTeam() != zSpieler->zTeam() && s->getX() <= ehpx - 10 && s->getX() + s->getWidth() > ehpx + 10 && s->getY() <= ehpy - 10 && s->getY() + s->getWidth() > ehpy + 10 )
+                s->nimmSchaden( 150 * (float)time, zSpieler, invert( r ), zSpiel );
+        }
+        timeLeft -= (float)time;
+        if( timeLeft <= 0 )
+            return 1;
+        break;
+    case 2:
+        switch( r )
+        {
+        case OBEN:
+            ehpy -= 200 * (float)time;
+            break;
+        case LINKS:
+            ehpx -= 200 * (float)time;
+            break;
+        case UNTEN:
+            ehpy += 200 * (float)time;
+            break;
+        case RECHTS:
+            ehpx += 200 * (float)time;
+            break;
+        default:
+            break;
+        }
+        if( !target->hatStyle( Bariere::Style::Aktiv ) || target->getX() > ehpx - 10 || target->getX() + target->getWidth() <= ehpx + 10 || target->getY() > ehpy - 10 || target->getY() + target->getWidth() <= ehpy + 10 )
+            state = 3;
+    }
+    return state != 5;
+}
+
+bool EnterhakenEffect::istGegenstandErlaubt( GegenstandTyp typ )
+{
+    return typ != STURM && typ != ROLLE;
+}
+
+bool EnterhakenEffect::istSpielerVerwundbar( Richtung r )
+{
+    return r != MITTE;
+}

+ 11 - 0
StickmanWorldOnline/Enterhaken.h

@@ -1,14 +1,25 @@
 #pragma once
 
 #include "Effect.h"
+#include "Bariere.h"
+
 
 class EnterhakenEffect : public Effect
 {
 private:
+    float ehpx;
+    float ehpy;
+    int state;
+    float maxTime;
+    Richtung r;
+    Bariere *target;
 
 public:
     EnterhakenEffect( Spieler *zSpieler, Richtung r );
     ~EnterhakenEffect();
     bool istSpielerBeweglich( Richtung r ) override;
     void move( double time ) override;
+    bool tick( double time, Spiel *zSpiel ) override;
+    bool istGegenstandErlaubt( GegenstandTyp typ ) override;
+    bool istSpielerVerwundbar( Richtung r ) override;
 };

+ 1 - 1
StickmanWorldOnline/Geist.cpp

@@ -2,7 +2,7 @@
 #include "Spieler.h"
 
 GeistEffect::GeistEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)( 5.f + ( 5.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 5.f + ( 5.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {}
 
 GeistEffect::~GeistEffect()

+ 1 - 1
StickmanWorldOnline/Leben.cpp

@@ -2,7 +2,7 @@
 #include "Spieler.h"
 
 LebenEffect::LebenEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)( 10.f + ( 10.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 10.f + ( 10.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     zSpieler->setLebensRegeneration( zSpieler->getLebensRegenneration() + 10 );
 }

+ 1 - 1
StickmanWorldOnline/LebenRune.cpp

@@ -3,7 +3,7 @@
 
 
 LebenRuneEffect::LebenRuneEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)( 75.f + ( 75.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 75.f + ( 75.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     zSpieler->setLebensRegeneration( zSpieler->getLebensRegenneration() + 10 );
 }

+ 7 - 5
StickmanWorldOnline/Rolle.cpp

@@ -2,7 +2,7 @@
 #include "Spieler.h"
 
 RolleEffect::RolleEffect( Spieler *zSpieler, Richtung r )
-    : Effect( zSpieler, (int)( 2.f + ( 2.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 2.f + ( 2.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     this->r = r;
 }
@@ -25,16 +25,18 @@ void RolleEffect::move( double time )
     switch( r )
     {
     case OBEN:
-        zSpieler->setY( zSpieler->getY() - ( 75 + zSpieler->getLaufTempo() ) * time );
+        zSpieler->setY( zSpieler->getY() - ( 75 + zSpieler->getLaufTempo() ) * (float)time );
         break;
     case RECHTS:
-        zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * time );
+        zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
         break;
     case UNTEN:
-        zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * time );
+        zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
         break;
     case LINKS:
-        zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * time );
+        zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * (float)time );
+        break;
+    default:
         break;
     }
 }

+ 1 - 1
StickmanWorldOnline/Schild.cpp

@@ -3,7 +3,7 @@
 
 
 SchildEffect::SchildEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)( 5.f + ( 5.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 5.f + ( 5.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {}
 
 SchildEffect::~SchildEffect()

+ 3 - 3
StickmanWorldOnline/Schuh.cpp

@@ -2,7 +2,7 @@
 #include "Spieler.h"
 
 SchuhEffect::SchuhEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)( 20.f + ( 20.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 20.f + ( 20.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     speedup = 15;
     zSpieler->setLaufTempo( zSpieler->getLaufTempo() + speedup );
@@ -15,7 +15,7 @@ SchuhEffect::~SchuhEffect()
 
 bool SchuhEffect::tick( double time, Spiel *zSpiel )
 {
-    zSpieler->setLaufTempo( zSpieler->getLaufTempo() - ( time / timeLeft ) * speedup );
-    speedup -= ( time / timeLeft ) * speedup;
+    zSpieler->setLaufTempo( zSpieler->getLaufTempo() - ( (float)time / timeLeft ) * speedup );
+    speedup -= ( (float)time / timeLeft ) * speedup;
     return Effect::tick( time, zSpiel );
 }

+ 1 - 0
StickmanWorldOnline/Spiel.h

@@ -105,6 +105,7 @@ public:
     Team *getTeam( int id ) const;
     Spieler *getSpieler( int id ) const;
     Iterator< Spieler * > getSpieler() const;
+    Iterator< Bariere * > getBarieren() const;
     Bariere *getBariere( int id ) const;
     Base *getBase( int id ) const;
     Drop *getDrop( int id ) const;

+ 2 - 2
StickmanWorldOnline/Spieler.cpp

@@ -262,7 +262,7 @@ void Spieler::addErfahrung( float anz, Spiel *zSpiel )
             lebensraub += 1;
         }
         if( level <= 100 )
-            lebensRegeneration += 0.25;
+            lebensRegeneration += 0.25f;
         Ereignis *e = new Ereignis( SPIELER_LEVEL_UP );
         e->addParameter( "Betroffener Spieler", getThis() );
         zSpiel->throwEvent( e );
@@ -329,7 +329,7 @@ void Spieler::tick( double zeit, Spiel *zSpiel )
         }
         if( tastenStand[ ' ' ] )
             useItem( zSpiel );
-        heilung( lebensRegeneration * zeit, zSpiel );
+        heilung( lebensRegeneration * (float)zeit, zSpiel );
     }
     else
     {

+ 1 - 0
StickmanWorldOnline/StickmanWorldOnline.vcxproj

@@ -85,6 +85,7 @@
     <ClCompile Include="DrachenAuge.cpp" />
     <ClCompile Include="Drop.cpp" />
     <ClCompile Include="Effect.cpp" />
+    <ClCompile Include="Enterhaken.cpp" />
     <ClCompile Include="GameObject.cpp" />
     <ClCompile Include="Gegenstand.cpp" />
     <ClCompile Include="Geist.cpp" />

+ 3 - 0
StickmanWorldOnline/StickmanWorldOnline.vcxproj.filters

@@ -120,6 +120,9 @@
     <ClCompile Include="Rolle.cpp">
       <Filter>Spiel\Effekte</Filter>
     </ClCompile>
+    <ClCompile Include="Enterhaken.cpp">
+      <Filter>Spiel\Effekte</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="SpielKlasse.h">

+ 1 - 1
StickmanWorldOnline/StrengthRune.cpp

@@ -3,7 +3,7 @@
 
 
 StrengthRuneEffect::StrengthRuneEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)( 75.f + ( 75.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 75.f + ( 75.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     zSpieler->setArmor( zSpieler->getArmor() + 7 );
     zSpieler->setSchadenBonus( zSpieler->getSchadenBonus() + 3 );

+ 8 - 6
StickmanWorldOnline/Sturm.cpp

@@ -3,7 +3,7 @@
 #include "Spiel.h"
 
 SturmEffect::SturmEffect( Spieler *zSpieler, Richtung r )
-    : Effect( zSpieler, (int)( 2.f + ( 2.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 2.f + ( 2.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     this->r = r;
 }
@@ -26,16 +26,18 @@ void SturmEffect::move( double time )
     switch( r )
     {
     case OBEN:
-        zSpieler->setY( zSpieler->getY() - (75 + zSpieler->getLaufTempo()) * time );
+        zSpieler->setY( zSpieler->getY() - (75 + zSpieler->getLaufTempo()) * (float)time );
         break;
     case RECHTS:
-        zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * time );
+        zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
         break;
     case UNTEN:
-        zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * time );
+        zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
         break;
     case LINKS:
-        zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * time );
+        zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * (float)time );
+        break;
+    default:
         break;
     }
 }
@@ -47,7 +49,7 @@ bool SturmEffect::tick( double time, Spiel *zSpiel )
         if( s->zTeam() != zSpieler->zTeam() )
         {
             if( s->intersectsWith( zSpieler ) )
-                s->nimmSchaden( 100 * time, zSpieler, r, zSpiel );
+                s->nimmSchaden( 100 * (float)time, zSpieler, r, zSpiel );
         }
     }
     return Effect::tick( time, zSpiel );

+ 1 - 1
StickmanWorldOnline/TempoRune.cpp

@@ -3,7 +3,7 @@
 
 
 TempoRuneEffect::TempoRuneEffect( Spieler *zSpieler )
-    : Effect( zSpieler, (int)( 75.f + ( 75.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+    : Effect( zSpieler, 75.f + ( 75.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
 {
     zSpieler->setLaufTempo( zSpieler->getLaufTempo() + 7 );
     zSpieler->setGeschossTempo( zSpieler->getGeschossTempo() + 3 );