123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #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<ResourceRegistry *>( 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<Bild *>( 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<Umlenkung *>( 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;
- }
|