#include "Timer.h" #include "Spiel.h" Timer::Timer( Schrift *zSchrift, int id, const char *name, int maxZeit, int x, int y, bool visible, bool autoWiederhohlung, bool runns, int farbe ) : GameObject( TIMER, x, y, 0, 0 ) { this->id = id; this->name = name; this->maxZeit = maxZeit; currentTime = (float)maxZeit; sichtbar = visible; this->autoWiederhohlung = autoWiederhohlung; tr.setSchriftSize( 12 ); tr.setSchriftZ( dynamic_cast( zSchrift->getThis() ) ); this->runns = runns; this->pause = 0; this->farbe = farbe; } void Timer::start( Spiel *zSpiel, bool restart ) { if( runns && !restart ) return; currentTime = (float)maxZeit; runns = true; pause = 0; zSpiel->setTimerZuletztGestartet( dynamic_cast( getThis() ) ); Ereignis *e = new Ereignis( TIMER_BEGINNT ); e->addParameter( "Betroffener Timer", dynamic_cast( this->getThis() ) ); zSpiel->throwEvent( e ); } void Timer::setPause( Spiel *zSpiel, bool pause ) { if( pause && !this->pause ) zSpiel->setTimerZuletztPausiert( dynamic_cast( getThis() ) ); if( !pause && this->pause ) zSpiel->setTimerZuletztFortgesetzt( dynamic_cast( getThis() ) ); this->pause = pause; } void Timer::setMaxZeit( int sekunden ) { this->maxZeit = maxZeit; } void Timer::setAutoWiederhohlung( bool wiederhohlung ) { this->autoWiederhohlung = autoWiederhohlung; } void Timer::setSichtbar( bool visible ) { this->sichtbar = sichtbar; } void Timer::setFarbe( int farbe ) { this->farbe = farbe; } void Timer::tick( double time, Spiel *zSpiel ) { if( runns && !pause ) { currentTime -= (float)time; if( currentTime <= 0 ) { zSpiel->setTimerZuletztAbgelaufen( dynamic_cast( getThis() ) ); runns = 0; Ereignis *e = new Ereignis( TIMER_RUNNS_OUT ); e->addParameter( "Betroffener Timer", dynamic_cast( this->getThis() ) ); zSpiel->throwEvent( e ); if( autoWiederhohlung ) start( zSpiel ); } } } void Timer::render( Bild &rObj ) { w = (float)tr.getTextBreite( Text( (int)( currentTime * 100 ) / 100.0 ) ); h = (float)tr.getTextHeight( Text( (int)( currentTime * 100 ) / 100.0 ) ); if( sichtbar && runns ) tr.renderText( (int)x, (int)y, Text( (int)( currentTime * 100 ) / 100.0 ), rObj, farbe ); } void Timer::setZeit( float zeit ) { currentTime = zeit; } float Timer::getTimeLeft() const { return currentTime; } bool Timer::istSichtbar() const { return sichtbar; } int Timer::getFarbe() const { return farbe; } bool Timer::isRunning() const { return runns; } bool Timer::istPausiert() const { return pause; } int Timer::getMaxTime() const { return maxZeit; } bool Timer::istAutoWiederhohlung() const { return autoWiederhohlung; } int Timer::getId() const { return id; }