#include "Sturm.h" #include "Spieler.h" #include "Spiel.h" SturmEffect::SturmEffect( ResourceRegistry *zResources, Spieler *zSpieler, Richtung r ) : Effect( zSpieler, 2.f + ( 2.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() ) { this->r = r; annimation = 0; if( r == LINKS ) annimation = zResources->getResource( R_STURM_LINKS, zSpieler->getFarbe() ); if( r == RECHTS ) annimation = zResources->getResource( R_STURM_RECHTS, zSpieler->getFarbe() ); if( r == OBEN ) annimation = zResources->getResource( R_STURM_OBEN, zSpieler->getFarbe() ); if( r == UNTEN ) annimation = zResources->getResource( R_STURM_UNTEN, zSpieler->getFarbe() ); } SturmEffect::~SturmEffect() { if( annimation ) annimation->release(); } bool SturmEffect::istSpielerBeweglich( Richtung r ) const { return false; } bool SturmEffect::istSpielerVerwundbar( Richtung r ) const { return r != this->r; } void SturmEffect::move( Richtung ri, double time ) { if( r != ri ) return; switch( r ) { case OBEN: zSpieler->setY( zSpieler->getY() - ( 75 + zSpieler->getLaufTempo() ) * (float)time ); break; case RECHTS: zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * (float)time ); break; case UNTEN: zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * (float)time ); break; case LINKS: zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * (float)time ); break; default: 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 * (float)time, zSpieler, r, zSpiel ); } } return Effect::tick( time, zSpiel ); } bool SturmEffect::istGegenstandErlaubt( GegenstandTyp typ ) const { return typ != ROLLE && typ != ENTERHAKEN; } Resource *SturmEffect::getCurrentResource() { return annimation ? annimation->getThis() : 0; }