#include "Base.h" #include "Spiel.h" #include "Ereignis.h" Base::Base( ResourceRegistry *zResources, int id, int x, int y, int width, int height, int maxTime, Team *team ) : GameObject( BASE, x, y, width, height ) { this->id = id; this->maxTime = maxTime; this->team = team; inChange = 0; nextTeam = 0; leftTime = (float)maxTime; resources = zResources->getThis(); this->textur = resources->zResource( R_BASE, team ? team->getFarbe() : 0 )->getImages()->getThis(); texturScale = 1; } Base::~Base() { if( team ) team->release(); if( nextTeam ) nextTeam->release(); resources->release(); } void Base::setTeam( Team *team, Spiel *zSpiel ) { Ereignis *e = new Ereignis( BASIS_BESITZERWECHSEL ); e->addParameter( "Betroffene Basis", getThis() ); e->addParameter( "Vorheriges Team", this->team ? this->team->getThis() : new Variable( NICHTS ) ); e->addParameter( "Nächstes Team", team ? team->getThis() : new Variable( NICHTS ) ); if( this->team ) this->team->release(); this->team = team; if( textur ) textur->release(); textur = resources->zResource( R_BASE, team ? team->getFarbe() : 0 )->getImages()->getThis(); zSpiel->setLastTeamChangedBase( (Base *)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 ? (Team *)team->getThis() : 0; } Team *Base::zTeam() const { return team; }