123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #include "Bariere.h"
- #include "Spiel.h"
- #include "Ereignis.h"
- Bariere::Bariere( ResourceRegistry *zResources, int id, int x, int y, int breite, int height, int style, int verschiebungWeite, int autoSchaltungMaxTime, Team *team )
- : GameObject( BARIERE, x, y, breite, height )
- {
- this->id = id;
- this->style = style;
- this->autoSchaltungMaxTime = autoSchaltungMaxTime;
- autoSchaltungCurrentTime = (float)autoSchaltungMaxTime;
- this->verschiebungWeite = verschiebungWeite;
- currentWeite = 0;
- verschiebungAnzahl = 0;
- schaltungAnzahl = 0;
- this->team = team;
- this->resources = zResources->getThis();
- if( breite > height )
- this->textur = resources->zResource( R_BARIERE, team ? team->getFarbe() : 0 )->getImages()->getThis();
- else
- {
- Bild *r = resources->zResource( R_BARIERE, team ? team->getFarbe() : 0 )->getImages();
- this->textur = new Bild();
- this->textur->neuBild( r->getHeight(), r->getBreite(), 0 );
- this->textur->drawBild90( 0, 0, r->getHeight(), r->getBreite(), *r );
- }
- }
- Bariere::~Bariere()
- {
- if( team )
- team->release();
- resources->release();
- }
- void Bariere::setStyle( int style, bool add, Spiel *zSpiel )
- {
- if( add )
- {
- if( ( style | Style::Aktiv ) == style && ( this->style | Style::Aktiv ) != this->style )
- zSpiel->setZuletztEingeschalteteBariere( (Bariere *)getThis() );
- this->style |= style;
- }
- else
- {
- if( ( style | Style::Aktiv ) == style && ( this->style | Style::Aktiv ) == this->style )
- zSpiel->setZuletztAusgeschalteteBariere( (Bariere *)getThis() );
- this->style &= ~style;
- }
- }
- void Bariere::setAutoVerschiebungWeite( int pixel )
- {
- verschiebungWeite = pixel;
- }
- void Bariere::startAutoVerschiebung( Spiel *zSpiel )
- {
- if( !hatStyle( Style::AutoVerschiebung ) || hatStyle( Style::InVerschiebung ) )
- return;
- zSpiel->setZuletztBewegteBariere( (Bariere *)getThis() );
- currentWeite = 0;
- setStyle( Style::InVerschiebung, 1, zSpiel );
- Ereignis *e = new Ereignis( BARIERE_WIRD_VERSCHOBEN );
- e->addParameter( "Betroffene Bariere", getThis() );
- e->addParameter( "Status", new String( "Start" ) );
- zSpiel->throwEvent( e );
- }
- void Bariere::setAutoSchaltungMaxTime( int seconds )
- {
- autoSchaltungMaxTime = seconds;
- }
- void Bariere::startAutoSchaltung( Spiel *zSpiel )
- {
- if( !hatStyle( Style::AutoSchaltung ) || hatStyle( Style::InSchaltung ) )
- return;
- autoSchaltungCurrentTime = (float)autoSchaltungMaxTime;
- setStyle( Style::InSchaltung, 1, zSpiel );
- }
- void Bariere::setTeam( Team *team )
- {
- if( this->team )
- this->team->release();
- this->team = team;
- if( this->textur )
- this->textur->release();
- if( w > h )
- this->textur = resources->zResource( R_BARIERE, team ? team->getFarbe() : 0 )->getImage( 0 );
- else
- {
- Bild *r = resources->zResource( R_BARIERE, team ? team->getFarbe() : 0 )->getImages();
- this->textur = new Bild();
- this->textur->neuBild( r->getHeight(), r->getBreite(), 0 );
- this->textur->drawBild90( 0, 0, r->getHeight(), r->getBreite(), *r );
- }
- }
- void Bariere::tick( double time, Spiel *zSpiel )
- {
- if( hatStyle( Style::InSchaltung ) )
- {
- autoSchaltungCurrentTime -= (float)time;
- if( autoSchaltungCurrentTime < 0 )
- {
- setStyle( Style::InSchaltung, 0, zSpiel );
- setStyle( Style::Aktiv, !hatStyle( Style::Aktiv ), zSpiel );
- schaltungAnzahl++;
- Ereignis *e = new Ereignis( BARIERE_SWITCHED );
- e->addParameter( "Betroffene Bariere", getThis() );
- zSpiel->throwEvent( e );
- }
- }
- if( hatStyle( Style::InVerschiebung ) )
- {
- float last = currentWeite;
- currentWeite += (float)time * 10;
- if( currentWeite >= verschiebungWeite )
- {
- currentWeite = (float)verschiebungWeite;
- setStyle( Style::InVerschiebung, 0, zSpiel );
- setStyle( Style::NextVerschiebungLinksOben, !hatStyle( Style::NextVerschiebungLinksOben ), zSpiel );
- verschiebungAnzahl++;
- Ereignis *e = new Ereignis( BARIERE_WIRD_VERSCHOBEN );
- e->addParameter( "Betroffene Bariere", getThis() );
- e->addParameter( "Status", new String( "Feritg" ) );
- zSpiel->throwEvent( e );
- }
- if( hatStyle( Style::VerschiebungWaagerecht ) )
- {
- if( hatStyle( Style::NextVerschiebungLinksOben ) )
- setX( getX() + last - currentWeite );
- else
- setX( getX() - last + currentWeite );
- }
- else
- {
- if( hatStyle( Style::NextVerschiebungLinksOben ) )
- setY( getY() + last - currentWeite );
- else
- setY( getY() - last + currentWeite );
- }
- }
- }
- void Bariere::render( Bild &rObj )
- {
- if( !hatStyle( Style::Aktiv ) )
- rObj.setAlpha( 0x77 );
- GameObject::render( rObj );
- if( !hatStyle( Style::Aktiv ) )
- rObj.releaseAlpha();
- }
- bool Bariere::hatStyle( int style ) const
- {
- return ( this->style | style ) == this->style;
- }
- int Bariere::getVerschiebungAnzahl() const
- {
- return verschiebungAnzahl;
- }
- int Bariere::getSchaltungAnzahl() const
- {
- return schaltungAnzahl;
- }
- int Bariere::getId() const
- {
- return id;
- }
- Team *Bariere::getTeam() const
- {
- if( !team )
- return 0;
- return (Team *)team->getThis();
- }
- Team *Bariere::zTeam() const
- {
- return team;
- }
|