#include "Umlenkung.h" #include "Spiel.h" Umlenkung::Umlenkung( ResourceRegistry *zResources, int id, int x, int y, int breite, int height, Richtung richtung, int maxAbklingzeit, bool drehend, bool aktiv ) : GameObject( UMLENKUNG, x, y, breite, height ) { this->id = id; this->maxAbklingzeit = maxAbklingzeit; this->drehend = drehend; this->aktiv = aktiv; benutzt = 0; abklingzeitVerbleibend = 0; this->resources = dynamic_cast( zResources->getThis() ); setRichtung( richtung ); } Umlenkung::~Umlenkung() { resources->release(); } void Umlenkung::setMaxAbklingzeit( int sekunden ) { this->maxAbklingzeit = sekunden; } void Umlenkung::setAktiv( bool aktiv ) { this->aktiv = aktiv; } void Umlenkung::setDrehend( bool drehend ) { this->drehend = drehend; } void Umlenkung::setRichtung( Richtung r ) { this->richtung = r; if( textur ) textur->release(); if( richtung == RECHTS ) textur = dynamic_cast( resources->zResource( R_UMLENKUNG, 0 )->getImages()->getThis() ); else if( richtung == LINKS ) { Bild *r = resources->zResource( R_UMLENKUNG, 0 )->getImages(); this->textur = new Bild(); this->textur->neuBild( r->getBreite(), r->getHeight(), 0 ); this->textur->drawBild180( 0, 0, r->getBreite(), r->getHeight(), *r ); } else { Bild *r = resources->zResource( R_UMLENKUNG, 0 )->getImages(); this->textur = new Bild(); this->textur->neuBild( r->getHeight(), r->getBreite(), 0 ); if( richtung == UNTEN ) this->textur->drawBild90( 0, 0, r->getHeight(), r->getBreite(), *r ); else this->textur->drawBild270( 0, 0, r->getHeight(), r->getBreite(), *r ); } } void Umlenkung::addBenutzt( Spiel *zSpiel ) { benutzt++; if( drehend ) { switch( richtung ) { case OBEN: setRichtung( RECHTS ); break; case RECHTS: setRichtung( UNTEN ); break; case UNTEN: setRichtung( LINKS ); break; case LINKS: setRichtung( OBEN ); break; default: break; } } abklingzeitVerbleibend = (float)maxAbklingzeit; zSpiel->setUmlenkungZuletztBenutzt( dynamic_cast( getThis() ) ); } void Umlenkung::tick( double time ) { if( abklingzeitVerbleibend > 0 ) { abklingzeitVerbleibend -= (float)time; if( abklingzeitVerbleibend < 0 ) abklingzeitVerbleibend = 0; } } void Umlenkung::render( Bild &rObj ) { if( !aktiv ) rObj.setAlpha( 0x77 ); GameObject::render( rObj ); if( !aktiv ) rObj.releaseAlpha(); } bool Umlenkung::isAktive() const { return aktiv; } bool Umlenkung::hatAbklingzeit() const { return abklingzeitVerbleibend > 0; } bool Umlenkung::istDrehend() const { return drehend; } int Umlenkung::getMaxAbklingzeit() const { return maxAbklingzeit; } Richtung Umlenkung::getRichtung() const { return richtung; } int Umlenkung::getBenutzungen() const { return benutzt; } int Umlenkung::getId() const { return id; }