|
@@ -363,7 +363,7 @@ void Spiel::tick( double zeit )
|
|
|
}
|
|
|
// barieren bewegung
|
|
|
for( auto b = barieren.getIterator(); b; b++ )
|
|
|
- b->tick( zeit );
|
|
|
+ b->tick( zeit, this );
|
|
|
// geschoss bewegung
|
|
|
for( int i = 0; i < shots.getEintragAnzahl(); i++ )
|
|
|
{
|
|
@@ -413,12 +413,13 @@ void Spiel::tick( double zeit )
|
|
|
{
|
|
|
if( t->istAktiv() && t->intersectsWith( g ) )
|
|
|
{
|
|
|
+ g->setX( g->getX() + t->getZielX() - t->getX() );
|
|
|
+ g->setY( g->getY() + t->getZielY() - t->getY() );
|
|
|
+ g->addTunnel();
|
|
|
Ereignis *e = new Ereignis( TUNNEL_BENUTZT );
|
|
|
e->addParameter( "Betroffes Geschoss", g->getThis() );
|
|
|
e->addParameter( "Betroffer Tunnel", t->getThis() );
|
|
|
throwEvent( e );
|
|
|
- g->setX( g->getX() + t->getZielX() - t->getX() );
|
|
|
- g->setY( g->getY() + t->getZielY() - t->getY() );
|
|
|
}
|
|
|
}
|
|
|
// geschoss - schalter intersection
|
|
@@ -431,6 +432,7 @@ void Spiel::tick( double zeit )
|
|
|
shots.remove( i );
|
|
|
i--;
|
|
|
removed = 1;
|
|
|
+ g->addSchalter();
|
|
|
activateShalter( s->getId() );
|
|
|
}
|
|
|
}
|
|
@@ -444,47 +446,70 @@ void Spiel::tick( double zeit )
|
|
|
{
|
|
|
if( u->isAktive() && !u->hatAbklingzeit() && g->getTyp() != GESCHOSS_PFEIL && u->intersectsWith( g ) )
|
|
|
{
|
|
|
+ g->setRichtung( u->getRichtung() );
|
|
|
+ g->addUmlenkung();
|
|
|
+ u->addBenutzt();
|
|
|
Ereignis *e = new Ereignis( UMLENKUNG_LENKT_UM );
|
|
|
e->addParameter( "Betroffes Geschoss", g->getThis() );
|
|
|
e->addParameter( "Betroffe Umlenkung", u->getThis() );
|
|
|
throwEvent( e );
|
|
|
- g->setRichtung( u->getRichtung() );
|
|
|
- u->addBenutzt();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // geschoss - spieler intersection
|
|
|
- for( auto s = spieler.getIterator(); s; s++ )
|
|
|
+ // geschoss - geschoss intersection
|
|
|
+ if( g->getTyp() == GESCHOSS_PFEIL )
|
|
|
{
|
|
|
- if( s->istAmLeben() && s != g->zBesitzer() )
|
|
|
+ for( int j = 0; j < shots.getEintragAnzahl(); j++ )
|
|
|
{
|
|
|
- switch( g->getTyp() )
|
|
|
+ if( i == j )
|
|
|
+ continue;
|
|
|
+ Geschoss *g2 = shots.z( j );
|
|
|
+ if( g2->intersectsWith( g ) )
|
|
|
{
|
|
|
- case GESCHOSS_PFEIL:
|
|
|
- case GESCHOSS_KUGEL:
|
|
|
+ if( g2->getTyp() == GESCHOSS_PFEIL )
|
|
|
+ removed = 1;
|
|
|
+ g->addGeschossTreffer();
|
|
|
+ if( j < i )
|
|
|
+ i--;
|
|
|
+ shots.remove( j );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( !removed )
|
|
|
+ {
|
|
|
+ // geschoss - spieler intersection
|
|
|
+ for( auto s = spieler.getIterator(); s; s++ )
|
|
|
+ {
|
|
|
+ if( s->istAmLeben() && s != g->zBesitzer() )
|
|
|
{
|
|
|
- double schaden = 100 + ( g->zBesitzer() ? g->zBesitzer()->getSchadenBonus() : 0 );
|
|
|
- s->nimmSchaden( schaden );
|
|
|
- if( g->zBesitzer() )
|
|
|
+ switch( g->getTyp() )
|
|
|
+ {
|
|
|
+ case GESCHOSS_PFEIL:
|
|
|
+ case GESCHOSS_KUGEL:
|
|
|
{
|
|
|
- g->zBesitzer()->addGemachterSchaden( schaden );
|
|
|
- if( !s->istAmLeben() )
|
|
|
- g->zBesitzer()->addKill();
|
|
|
+ double schaden = 100 + ( g->zBesitzer() ? g->zBesitzer()->getSchadenBonus() : 0 );
|
|
|
+ s->nimmSchaden( schaden );
|
|
|
+ if( g->zBesitzer() )
|
|
|
+ {
|
|
|
+ g->zBesitzer()->addGemachterSchaden( schaden );
|
|
|
+ if( !s->istAmLeben() )
|
|
|
+ g->zBesitzer()->addKill();
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
- break;
|
|
|
- }
|
|
|
- case GESCHOSS_DRACHENAUGE:
|
|
|
- s->addEffekt( new DrachenAugeEffekt( g->zBesitzer(), s._, 10 ) );
|
|
|
- break;
|
|
|
- case GESCHOSS_FEUERBALL:
|
|
|
- feuer.add( new FeuerballTreffer( ++nextId, g->getX() - 70, g->getY() - 70, g->getBesitzer(), 10 ) );
|
|
|
+ case GESCHOSS_DRACHENAUGE:
|
|
|
+ s->addEffekt( new DrachenAugeEffekt( g->zBesitzer(), s._, 10 ) );
|
|
|
+ break;
|
|
|
+ case GESCHOSS_FEUERBALL:
|
|
|
+ feuer.add( new FeuerballTreffer( ++nextId, g->getX() - 70, g->getY() - 70, g->getBesitzer(), 10 ) );
|
|
|
+ }
|
|
|
+ if( g->zBesitzer() )
|
|
|
+ g->zBesitzer()->addTreffer();
|
|
|
+ s->addGetroffen();
|
|
|
+ shots.remove( i );
|
|
|
+ i--;
|
|
|
+ removed = 1;
|
|
|
}
|
|
|
- if( g->zBesitzer() )
|
|
|
- g->zBesitzer()->addTreffer();
|
|
|
- s->addGetroffen();
|
|
|
- shots.remove( i );
|
|
|
- i--;
|
|
|
- removed = 1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -576,6 +601,9 @@ void Spiel::addDrop( Drop * drop )
|
|
|
void Spiel::addGegenstand( Gegenstand * gegenstand )
|
|
|
{
|
|
|
items.add( gegenstand );
|
|
|
+ Ereignis *e = new Ereignis( GEGENSTAND_DROPED );
|
|
|
+ e->addParameter( "Betroffener Gegenstand", gegenstand->getThis() );
|
|
|
+ throwEvent( e );
|
|
|
}
|
|
|
|
|
|
void Spiel::addGeschoss( Geschoss * geschoss )
|
|
@@ -659,6 +687,7 @@ void Spiel::activateShalter( int id )
|
|
|
{
|
|
|
if( s->getId() == id )
|
|
|
{
|
|
|
+ s->press();
|
|
|
Ereignis *e = new Ereignis( SCHALTER_AKTIVIERT );
|
|
|
e->addParameter( "Betroffener Schalter", s->getThis() );
|
|
|
throwEvent( e );
|