#include "Base.h" #include "Spiel.h" #include "Ereignis.h" Base::Base( int id, int x, int y, int width, int height, bool showTimer, Punkt timerPosition, int timerFarbe, int maxTime, Team *team ) : GameObject( BASE, x, y, width, height ) { this->showTimer = showTimer; this->timerPosition = timerPosition; this->timerFarbe = timerFarbe; this->id = id; this->maxTime = maxTime; this->team = team; inChange = 0; nextTeam = 0; leftTime = (float)maxTime; } Base::~Base() { if( team ) team->release(); if( nextTeam ) nextTeam->release(); } void Base::setTeam( Team *team, Spiel *zSpiel ) { Ereignis *e = new Ereignis( BASIS_BESITZERWECHSEL ); e->addParameter( "Betroffene Basis", dynamic_cast( getThis() ) ); e->addParameter( "Vorheriges Team", this->team ? dynamic_cast( this->team->getThis() ) : new Variable( NICHTS ) ); e->addParameter( "Nächstes Team", team ? dynamic_cast( team->getThis() ) : new Variable( NICHTS ) ); if( this->team ) this->team->release(); this->team = team; zSpiel->setLastTeamChangedBase( dynamic_cast( getThis() ) ); zSpiel->throwEvent( e ); } void Base::startChange( Team *team ) { if( team == this->team ) { inChange = 0; if( nextTeam ) nextTeam = (Team *)nextTeam->release(); team->release(); return; } else if( this->team ) { if( nextTeam ) nextTeam = (Team *)nextTeam->release(); leftTime = (float)maxTime; inChange = 1; team->release(); } else { if( nextTeam ) nextTeam = (Team *)nextTeam->release(); nextTeam = team; leftTime = (float)maxTime; inChange = 1; } } void Base::tick( double time, Spiel *zSpiel ) { if( inChange ) { leftTime -= (float)time; if( leftTime <= 0 ) { setTeam( nextTeam, zSpiel ); nextTeam = 0; inChange = 0; } } } int Base::getId() const { return id; } Team *Base::getTeam() const { return team ? dynamic_cast( team->getThis() ) : 0; } Team *Base::zTeam() const { return team; }