Kaynağa Gözat

Sturm fertig

Kolja Strohm 5 yıl önce
ebeveyn
işleme
dac9d3335f

+ 1 - 0
StickmanWorldOnline/Spiel.h

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

+ 1 - 0
StickmanWorldOnline/StickmanWorldOnline.vcxproj

@@ -99,6 +99,7 @@
     <ClCompile Include="Spiel.cpp" />
     <ClCompile Include="Spieler.cpp" />
     <ClCompile Include="StrengthRune.cpp" />
+    <ClCompile Include="Sturm.cpp" />
     <ClCompile Include="Team.cpp" />
     <ClCompile Include="TempoRune.cpp" />
     <ClCompile Include="Timer.cpp" />

+ 3 - 0
StickmanWorldOnline/StickmanWorldOnline.vcxproj.filters

@@ -114,6 +114,9 @@
     <ClCompile Include="Schuh.cpp">
       <Filter>Spiel\Effekte</Filter>
     </ClCompile>
+    <ClCompile Include="Sturm.cpp">
+      <Filter>Spiel\Effekte</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="SpielKlasse.h">

+ 54 - 0
StickmanWorldOnline/Sturm.cpp

@@ -0,0 +1,54 @@
+#include "Sturm.h"
+#include "Spieler.h"
+#include "Spiel.h"
+
+SturmEffect::SturmEffect( Spieler *zSpieler, Richtung r )
+    : Effect( zSpieler, (int)( 2.f + ( 2.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) )
+{
+    this->r = r;
+}
+
+SturmEffect::~SturmEffect()
+{}
+
+bool SturmEffect::istSpielerBeweglich( Richtung r )
+{
+    return false;
+}
+
+bool SturmEffect::istSpielerVerwundbar( Richtung r )
+{
+    return r != this->r;
+}
+
+void SturmEffect::move( double time )
+{
+    switch( r )
+    {
+    case OBEN:
+        zSpieler->setY( zSpieler->getY() - (75 + zSpieler->getLaufTempo()) * time );
+        break;
+    case RECHTS:
+        zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * time );
+        break;
+    case UNTEN:
+        zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * time );
+        break;
+    case LINKS:
+        zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * time );
+        break;
+    }
+}
+
+bool SturmEffect::tick( double time, Spiel *zSpiel )
+{
+    for( auto s = zSpiel->getSpieler(); s; s++ )
+    {
+        if( s->zTeam() != zSpieler->zTeam() )
+        {
+            if( s->intersectsWith( zSpieler ) )
+                s->nimmSchaden( 100 * time, zSpieler, r, zSpiel );
+        }
+    }
+    return Effect::tick( time, zSpiel );
+}

+ 2 - 0
StickmanWorldOnline/Sturm.h

@@ -5,6 +5,7 @@
 class SturmEffect : public Effect
 {
 private:
+    Richtung r;
 
 public:
     SturmEffect( Spieler *zSpieler, Richtung r );
@@ -12,4 +13,5 @@ public:
     bool istSpielerBeweglich( Richtung r ) override;
     bool istSpielerVerwundbar( Richtung r ) override;
     void move( double time ) override;
+    bool tick( double time, Spiel *zSpiel ) override;
 };