#include "Timer.h"
#include "Spiel.h"

Timer::Timer( 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;
    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( (Timer *)getThis() );
    Ereignis *e = new Ereignis( TIMER_BEGINNT );
    e->addParameter( "Betroffener Timer", this->getThis() );
    zSpiel->throwEvent( e );
}

void Timer::setPause( Spiel *zSpiel, bool pause )
{
    if( pause && !this->pause )
        zSpiel->setTimerZuletztPausiert( (Timer *)getThis() );
    if( !pause && this->pause )
        zSpiel->setTimerZuletztFortgesetzt( (Timer *)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( (Timer *)getThis() );
            runns = 0;
            Ereignis *e = new Ereignis( TIMER_RUNNS_OUT );
            e->addParameter( "Betroffener Timer", this->getThis() );
            zSpiel->throwEvent( e );
            if( autoWiederhohlung )
                start( zSpiel );
        }
    }
}

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;
}