#include "Rolle.h" #include "Spieler.h" RolleEffect::RolleEffect( 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_ROLLE_LINKS, zSpieler->getFarbe() ); if( r == RECHTS ) annimation = zResources->getResource( R_ROLLE_RECHTS, zSpieler->getFarbe() ); if( r == OBEN ) annimation = zResources->getResource( R_ROLLE_OBEN, zSpieler->getFarbe() ); if( r == UNTEN ) annimation = zResources->getResource( R_ROLLE_UNTEN, zSpieler->getFarbe() ); effectImage = zResources->zResource( R_ROLLE, 0 )->getImage( 0 ); } RolleEffect::~RolleEffect() { if( annimation ) annimation->release(); } bool RolleEffect::istSpielerBeweglich( Richtung r ) const { return false; } bool RolleEffect::istSpielerVerwundbar( Richtung r ) const { return r == MITTE; } void RolleEffect::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 RolleEffect::istGegenstandErlaubt( GegenstandTyp typ ) const { return typ != STURM && typ != ENTERHAKEN; } Resource *RolleEffect::getCurrentResource() { return annimation ? dynamic_cast( annimation->getThis() ) : 0; }