|
@@ -8,74 +8,65 @@
|
|
// Inhalt der Spieler Klasse aus Spieler.h
|
|
// Inhalt der Spieler Klasse aus Spieler.h
|
|
// Konstruktor
|
|
// Konstruktor
|
|
Spieler::Spieler( KSGClient::InformationServerClient *zInfoK, Schrift *zSchrift, SpielerStr *zStr )
|
|
Spieler::Spieler( KSGClient::InformationServerClient *zInfoK, Schrift *zSchrift, SpielerStr *zStr )
|
|
|
|
+ : Model2DObject()
|
|
{
|
|
{
|
|
- textur = 0;
|
|
|
|
deadPlayer = 0;
|
|
deadPlayer = 0;
|
|
accountId = 0;
|
|
accountId = 0;
|
|
sNum = zStr->id;
|
|
sNum = zStr->id;
|
|
- current.farbe = 0;
|
|
|
|
- ship = new Model2D();
|
|
|
|
- ship->setStyle( Model2D::Style::Sichtbar | Model2D::Style::Textur | Model2D::Style::Alpha );
|
|
|
|
|
|
+ farbe = 0;
|
|
team = 0;
|
|
team = 0;
|
|
info = zInfoK->getThis();
|
|
info = zInfoK->getThis();
|
|
name = 0;
|
|
name = 0;
|
|
for( int i = 0; i < T_MAX; i++ )
|
|
for( int i = 0; i < T_MAX; i++ )
|
|
tastatur[ i ] = 0;
|
|
tastatur[ i ] = 0;
|
|
- current.amLeben = 1;
|
|
|
|
- current.schussAbk = 0;
|
|
|
|
- current.energieAbk = 0;
|
|
|
|
- current.repAbk = 0;
|
|
|
|
- current.reinkAbk = 0;
|
|
|
|
- current.maxReinkAbk = 5;
|
|
|
|
|
|
+ amLeben = 1;
|
|
|
|
+ schussAbk = 0;
|
|
|
|
+ energieAbk = 0;
|
|
|
|
+ repAbk = 0;
|
|
|
|
+ reinkAbk = 0;
|
|
|
|
+ maxReinkAbk = 5;
|
|
ref = 1;
|
|
ref = 1;
|
|
- current.startPos = zStr->pos;
|
|
|
|
- current.pos = zStr->pos;
|
|
|
|
- current.speed = Vec2< double >( 0, 0 );
|
|
|
|
- current.rotation = zStr->rot;
|
|
|
|
- current.beschleunigung = zStr->beschleunigung;
|
|
|
|
|
|
+ startPos = zStr->pos;
|
|
|
|
+ setPosition( zStr->pos );
|
|
|
|
+ setDrehung( (float)zStr->rot );
|
|
|
|
+ beschleunigung = zStr->beschleunigung;
|
|
beschleunigungStart = zStr->beschleunigung;
|
|
beschleunigungStart = zStr->beschleunigung;
|
|
- current.energie = zStr->maxEnergie;
|
|
|
|
- current.stabilität = zStr->maxStabilität;
|
|
|
|
- current.reparatur = zStr->reparatur;
|
|
|
|
- current.laserIntensität = zStr->laserIntensität;
|
|
|
|
- current.laserEffizienz = zStr->laserEffizienz;
|
|
|
|
- current.akkuLeistung = zStr->akkuLeistung;
|
|
|
|
|
|
+ energie = zStr->maxEnergie;
|
|
|
|
+ stabilität = zStr->maxStabilität;
|
|
|
|
+ reparatur = zStr->reparatur;
|
|
|
|
+ laserIntensität = zStr->laserIntensität;
|
|
|
|
+ laserEffizienz = zStr->laserEffizienz;
|
|
|
|
+ akkuLeistung = zStr->akkuLeistung;
|
|
akkuLeistungStart = zStr->akkuLeistung;
|
|
akkuLeistungStart = zStr->akkuLeistung;
|
|
- current.maxEnergie = zStr->maxEnergie;
|
|
|
|
- current.maxStabilität = zStr->maxStabilität;
|
|
|
|
- current.laserTempo = zStr->laserTempo;
|
|
|
|
- current.netzwerk = zStr->netzwerk;
|
|
|
|
- current.wendigkeit = zStr->wendigkeit;
|
|
|
|
- wendigkeitStart = current.wendigkeit;
|
|
|
|
- current.antriebEffizienz = zStr->antriebEffizienz;
|
|
|
|
- current.energieSchild = zStr->energieSchild;
|
|
|
|
- current.energieSchildEffizienz = zStr->energieSchildEffizienz;
|
|
|
|
|
|
+ maxEnergie = zStr->maxEnergie;
|
|
|
|
+ maxStabilität = zStr->maxStabilität;
|
|
|
|
+ laserTempo = zStr->laserTempo;
|
|
|
|
+ netzwerk = zStr->netzwerk;
|
|
|
|
+ wendigkeit = zStr->wendigkeit;
|
|
|
|
+ wendigkeitStart = wendigkeit;
|
|
|
|
+ antriebEffizienz = zStr->antriebEffizienz;
|
|
|
|
+ energieSchild = zStr->energieSchild;
|
|
|
|
+ energieSchildEffizienz = zStr->energieSchildEffizienz;
|
|
skillPunkte = zStr->skillPunkte;
|
|
skillPunkte = zStr->skillPunkte;
|
|
- current.schadenBekommen = 0;
|
|
|
|
- current.schadenGemacht = 0;
|
|
|
|
- current.treibstoffVerbraucht = 0;
|
|
|
|
- current.schüsse = 0;
|
|
|
|
- current.treffer = 0;
|
|
|
|
- current.punkte = 0;
|
|
|
|
- current.kills = 0;
|
|
|
|
- current.tode = 0;
|
|
|
|
- current.zeitAmLeben = 0;
|
|
|
|
- current.zeitTod = 0;
|
|
|
|
|
|
+ schadenBekommen = 0;
|
|
|
|
+ schadenGemacht = 0;
|
|
|
|
+ treibstoffVerbraucht = 0;
|
|
|
|
+ schüsse = 0;
|
|
|
|
+ treffer = 0;
|
|
|
|
+ punkte = 0;
|
|
|
|
+ kills = 0;
|
|
|
|
+ tode = 0;
|
|
|
|
+ zeitAmLeben = 0;
|
|
|
|
+ zeitTod = 0;
|
|
nText = initTextFeld( 0, 0, 152, 30, zSchrift, TextFeld::Style::Text | TextFeld::Style::Rahmen | TextFeld::Style::Center |
|
|
nText = initTextFeld( 0, 0, 152, 30, zSchrift, TextFeld::Style::Text | TextFeld::Style::Rahmen | TextFeld::Style::Center |
|
|
TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha, "" );
|
|
TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha, "" );
|
|
- current.spielZeit = 0;
|
|
|
|
- current.rSpeed = 0;
|
|
|
|
- ship->setPosition( current.pos );
|
|
|
|
- ship->setDrehung( (float)current.rotation );
|
|
|
|
- last = current;
|
|
|
|
|
|
+ spielZeit = 0;
|
|
|
|
+ save();
|
|
}
|
|
}
|
|
|
|
|
|
// Destruktor
|
|
// Destruktor
|
|
Spieler::~Spieler()
|
|
Spieler::~Spieler()
|
|
{
|
|
{
|
|
- if( textur )
|
|
|
|
- textur->release();
|
|
|
|
- ship->release();
|
|
|
|
info->release();
|
|
info->release();
|
|
if( team )
|
|
if( team )
|
|
team->release();
|
|
team->release();
|
|
@@ -88,12 +79,96 @@ Spieler::~Spieler()
|
|
|
|
|
|
double Spieler::calculateLaserCost()
|
|
double Spieler::calculateLaserCost()
|
|
{
|
|
{
|
|
- double kosten = ( ( current.laserIntensität + team->laserIntensität ) / 2 + ( current.laserTempo + team->laserTempo ) / 13 ) * ( 1 / ( ( current.laserEffizienz + team->laserEffizienz ) / 25 ) );
|
|
|
|
|
|
+ double kosten = ( ( laserIntensität + team->laserIntensität ) / 2 + ( laserTempo + team->laserTempo ) / 13 ) * ( 1 / ( ( laserEffizienz + team->laserEffizienz ) / 25 ) );
|
|
if( kosten < 1 )
|
|
if( kosten < 1 )
|
|
kosten = 1;
|
|
kosten = 1;
|
|
return kosten;
|
|
return kosten;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void Spieler::save()
|
|
|
|
+{
|
|
|
|
+ last.rSpeed = getDrehungSpeed();
|
|
|
|
+ last.pos = getPosition();
|
|
|
|
+ last.speed = getSpeed();
|
|
|
|
+ last.rotation = getDrehung();
|
|
|
|
+ last.farbe = farbe;
|
|
|
|
+ last.amLeben = amLeben;
|
|
|
|
+ last.schussAbk = schussAbk;
|
|
|
|
+ last.energieAbk = energieAbk;
|
|
|
|
+ last.repAbk = repAbk;
|
|
|
|
+ last.reinkAbk = reinkAbk;
|
|
|
|
+ last.maxReinkAbk = maxReinkAbk;
|
|
|
|
+ last.spielZeit = spielZeit;
|
|
|
|
+ last.startPos = startPos;
|
|
|
|
+ last.beschleunigung = beschleunigung;
|
|
|
|
+ last.energie = energie;
|
|
|
|
+ last.stabilität = stabilität;
|
|
|
|
+ last.reparatur = reparatur;
|
|
|
|
+ last.laserIntensität = laserIntensität;
|
|
|
|
+ last.laserEffizienz = laserEffizienz;
|
|
|
|
+ last.akkuLeistung = akkuLeistung;
|
|
|
|
+ last.maxEnergie = maxEnergie;
|
|
|
|
+ last.maxStabilität = maxStabilität;
|
|
|
|
+ last.laserTempo = laserTempo;
|
|
|
|
+ last.netzwerk = netzwerk;
|
|
|
|
+ last.wendigkeit = wendigkeit;
|
|
|
|
+ last.antriebEffizienz = antriebEffizienz;
|
|
|
|
+ last.energieSchild = energieSchild;
|
|
|
|
+ last.energieSchildEffizienz = energieSchildEffizienz;
|
|
|
|
+ last.zeitAmLeben = zeitAmLeben;
|
|
|
|
+ last.zeitTod = zeitTod;
|
|
|
|
+ last.schadenBekommen = schadenBekommen;
|
|
|
|
+ last.schadenGemacht = schadenGemacht;
|
|
|
|
+ last.treibstoffVerbraucht = treibstoffVerbraucht;
|
|
|
|
+ last.schüsse = schüsse;
|
|
|
|
+ last.treffer = treffer;
|
|
|
|
+ last.punkte = punkte;
|
|
|
|
+ last.kills = kills;
|
|
|
|
+ last.tode = tode;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void Spieler::load()
|
|
|
|
+{
|
|
|
|
+ setDrehungSpeed( last.rSpeed );
|
|
|
|
+ setPosition( last.pos );
|
|
|
|
+ setSpeed( last.speed );
|
|
|
|
+ setDrehung( last.rotation );
|
|
|
|
+ farbe = last.farbe;
|
|
|
|
+ amLeben = last.amLeben;
|
|
|
|
+ schussAbk = last.schussAbk;
|
|
|
|
+ energieAbk = last.energieAbk;
|
|
|
|
+ repAbk = last.repAbk;
|
|
|
|
+ reinkAbk = last.reinkAbk;
|
|
|
|
+ maxReinkAbk = last.maxReinkAbk;
|
|
|
|
+ spielZeit = last.spielZeit;
|
|
|
|
+ startPos = last.startPos;
|
|
|
|
+ beschleunigung = last.beschleunigung;
|
|
|
|
+ energie = last.energie;
|
|
|
|
+ stabilität = last.stabilität;
|
|
|
|
+ reparatur = last.reparatur;
|
|
|
|
+ laserIntensität = last.laserIntensität;
|
|
|
|
+ laserEffizienz = last.laserEffizienz;
|
|
|
|
+ akkuLeistung = last.akkuLeistung;
|
|
|
|
+ maxEnergie = last.maxEnergie;
|
|
|
|
+ maxStabilität = last.maxStabilität;
|
|
|
|
+ laserTempo = last.laserTempo;
|
|
|
|
+ netzwerk = last.netzwerk;
|
|
|
|
+ wendigkeit = last.wendigkeit;
|
|
|
|
+ antriebEffizienz = last.antriebEffizienz;
|
|
|
|
+ energieSchild = last.energieSchild;
|
|
|
|
+ energieSchildEffizienz = last.energieSchildEffizienz;
|
|
|
|
+ zeitAmLeben = last.zeitAmLeben;
|
|
|
|
+ zeitTod = last.zeitTod;
|
|
|
|
+ schadenBekommen = last.schadenBekommen;
|
|
|
|
+ schadenGemacht = last.schadenGemacht;
|
|
|
|
+ treibstoffVerbraucht = last.treibstoffVerbraucht;
|
|
|
|
+ schüsse = last.schüsse;
|
|
|
|
+ treffer = last.treffer;
|
|
|
|
+ punkte = last.punkte;
|
|
|
|
+ kills = last.kills;
|
|
|
|
+ tode = last.tode;
|
|
|
|
+}
|
|
|
|
+
|
|
// nicht constant
|
|
// nicht constant
|
|
void Spieler::setModelData( Model2DData *data, Animation2DData *zFStart, Animation2DData *zFBurn )
|
|
void Spieler::setModelData( Model2DData *data, Animation2DData *zFStart, Animation2DData *zFBurn )
|
|
{
|
|
{
|
|
@@ -151,7 +226,7 @@ void Spieler::setModelData( Model2DData *data, Animation2DData *zFStart, Animati
|
|
kL.normalize();
|
|
kL.normalize();
|
|
kR.normalize();
|
|
kR.normalize();
|
|
kM.normalize();
|
|
kM.normalize();
|
|
- ship->setModel( data );
|
|
|
|
|
|
+ setModel( data );
|
|
flammenM = new Textur2D();
|
|
flammenM = new Textur2D();
|
|
flammenM->addAnimationZ( zFStart->getThis() );
|
|
flammenM->addAnimationZ( zFStart->getThis() );
|
|
flammenM->addAnimationZ( zFBurn->getThis() );
|
|
flammenM->addAnimationZ( zFBurn->getThis() );
|
|
@@ -161,9 +236,9 @@ void Spieler::setModelData( Model2DData *data, Animation2DData *zFStart, Animati
|
|
flammenR = new Textur2D();
|
|
flammenR = new Textur2D();
|
|
flammenR->addAnimationZ( zFStart->getThis() );
|
|
flammenR->addAnimationZ( zFStart->getThis() );
|
|
flammenR->addAnimationZ( zFBurn->getThis() );
|
|
flammenR->addAnimationZ( zFBurn->getThis() );
|
|
- ship->setTextur( flammenL->getThis(), "engine_l" );
|
|
|
|
- ship->setTextur( flammenR->getThis(), "engine_r" );
|
|
|
|
- ship->setTextur( flammenM->getThis(), "engine_m" );
|
|
|
|
|
|
+ setTextur( flammenL->getThis(), "engine_l" );
|
|
|
|
+ setTextur( flammenR->getThis(), "engine_r" );
|
|
|
|
+ setTextur( flammenM->getThis(), "engine_m" );
|
|
}
|
|
}
|
|
|
|
|
|
void Spieler::setAccountId( int accId )
|
|
void Spieler::setAccountId( int accId )
|
|
@@ -185,7 +260,7 @@ void Spieler::setTeam( Team *team )
|
|
|
|
|
|
void Spieler::setSpielerFarbe( int fc, Bild *zTextur )
|
|
void Spieler::setSpielerFarbe( int fc, Bild *zTextur )
|
|
{
|
|
{
|
|
- current.farbe = fc;
|
|
|
|
|
|
+ farbe = fc;
|
|
nText->setSchriftFarbe( fc );
|
|
nText->setSchriftFarbe( fc );
|
|
Bild *shb = new Bild();
|
|
Bild *shb = new Bild();
|
|
shb->neuBild( zTextur->getBreite(), zTextur->getHeight(), 0 );
|
|
shb->neuBild( zTextur->getBreite(), zTextur->getHeight(), 0 );
|
|
@@ -199,36 +274,23 @@ void Spieler::setSpielerFarbe( int fc, Bild *zTextur )
|
|
shb->alphaPixelDP( i, buffer[ i ] );
|
|
shb->alphaPixelDP( i, buffer[ i ] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if( textur )
|
|
|
|
- textur->release();
|
|
|
|
- textur = new Textur2D();
|
|
|
|
|
|
+ Textur2D *textur = new Textur2D();
|
|
textur->setTexturZ( shb );
|
|
textur->setTexturZ( shb );
|
|
- ship->setTextur( textur->getThis(), "ship" );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void Spieler::setGeschwindigkeit( double xSpeed, double ySpeed )
|
|
|
|
-{
|
|
|
|
- current.speed = Vec2< double >( xSpeed, ySpeed );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void Spieler::setPosition( Vec2< double > p )
|
|
|
|
-{
|
|
|
|
- current.pos = p;
|
|
|
|
- ship->setPosition( current.pos );
|
|
|
|
|
|
+ setTextur( textur, "ship" );
|
|
}
|
|
}
|
|
|
|
|
|
-void Spieler::setTastataturStatus( TastaturStatus ts, bool aktiv, int sZ, Karte *zMap )
|
|
|
|
|
|
+void Spieler::setTastataturStatus( TastaturStatus ts, bool aktiv, int sZ, const WeltInfo &info )
|
|
{
|
|
{
|
|
- if( !current.amLeben )
|
|
|
|
|
|
+ if( !amLeben )
|
|
{
|
|
{
|
|
tastatur[ ts ] = aktiv;
|
|
tastatur[ ts ] = aktiv;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- int z = sZ - current.spielZeit;
|
|
|
|
- int time = current.spielZeit;
|
|
|
|
- resetToSaveTime( sZ, zMap );
|
|
|
|
|
|
+ int z = sZ - spielZeit;
|
|
|
|
+ int time = spielZeit;
|
|
|
|
+ resetToSaveTime( sZ, info );
|
|
tastatur[ ts ] = aktiv;
|
|
tastatur[ ts ] = aktiv;
|
|
- resetToGameTime( time, zMap );
|
|
|
|
|
|
+ resetToGameTime( time, info );
|
|
if( flammenM && flammenR && flammenL )
|
|
if( flammenM && flammenR && flammenL )
|
|
{
|
|
{
|
|
switch( ts )
|
|
switch( ts )
|
|
@@ -255,177 +317,116 @@ void Spieler::setTastataturStatus( TastaturStatus ts, bool aktiv, int sZ, Karte
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-bool Spieler::tick( int time, Karte *zMap )
|
|
|
|
|
|
+bool Spieler::tick( const WeltInfo &info, double tv )
|
|
{
|
|
{
|
|
- if( time <= current.spielZeit )
|
|
|
|
- return 0;
|
|
|
|
bool ret = 0;
|
|
bool ret = 0;
|
|
- while( current.spielZeit != time )
|
|
|
|
|
|
+ if( !team )
|
|
|
|
+ return 0;
|
|
|
|
+ if( !spielZeit )
|
|
|
|
+ save();
|
|
|
|
+ tv = TICK;
|
|
|
|
+ reinkAbk -= tv;
|
|
|
|
+ if( reinkAbk < 0 )
|
|
|
|
+ reinkAbk = 0;
|
|
|
|
+ flammenM->tick( tv );
|
|
|
|
+ flammenL->tick( tv );
|
|
|
|
+ flammenR->tick( tv );
|
|
|
|
+ if( amLeben )
|
|
{
|
|
{
|
|
- if( !team )
|
|
|
|
- return 0;
|
|
|
|
- if( !current.spielZeit )
|
|
|
|
- last = current;
|
|
|
|
- double tv = TICK;
|
|
|
|
- current.reinkAbk -= tv;
|
|
|
|
- if( current.reinkAbk < 0 )
|
|
|
|
- current.reinkAbk = 0;
|
|
|
|
- flammenM->tick( tv );
|
|
|
|
- flammenL->tick( tv );
|
|
|
|
- flammenR->tick( tv );
|
|
|
|
- if( current.amLeben )
|
|
|
|
|
|
+ schussAbk -= tv;
|
|
|
|
+ energieAbk -= tv;
|
|
|
|
+ if( schussAbk < 0 )
|
|
|
|
+ schussAbk = 0;
|
|
|
|
+ if( energieAbk < 0 )
|
|
|
|
+ energieAbk = 0;
|
|
|
|
+ repAbk -= tv;
|
|
|
|
+ if( repAbk < 0 )
|
|
|
|
+ repAbk = 0;
|
|
|
|
+ spielZeit++;
|
|
|
|
+ if( tastatur[ T_GAS ] )
|
|
{
|
|
{
|
|
- current.schussAbk -= tv;
|
|
|
|
- current.energieAbk -= tv;
|
|
|
|
- if( current.schussAbk < 0 )
|
|
|
|
- current.schussAbk = 0;
|
|
|
|
- if( current.energieAbk < 0 )
|
|
|
|
- current.energieAbk = 0;
|
|
|
|
- current.repAbk -= tv;
|
|
|
|
- if( current.repAbk < 0 )
|
|
|
|
- current.repAbk = 0;
|
|
|
|
- current.spielZeit++;
|
|
|
|
- if( tastatur[ T_GAS ] )
|
|
|
|
- {
|
|
|
|
- Vertex hp;
|
|
|
|
- Vertex mv;
|
|
|
|
- float r;
|
|
|
|
- double treibstoff = 0.5 * ( ( current.beschleunigung + team->beschleunigung) / 5 )
|
|
|
|
- * tv * ( 100 / ( current.antriebEffizienz + team->antriebEffizienz ) );
|
|
|
|
- current.treibstoffVerbraucht += treibstoff;
|
|
|
|
- double factor = 1;
|
|
|
|
- if( treibstoff > current.energie )
|
|
|
|
- factor = current.energie / treibstoff;
|
|
|
|
- if( ship->zModel()->calcHitPoint( stM, kM * (float)( current.beschleunigung + team->beschleunigung ), "ship", hp, mv, r ) )
|
|
|
|
- {
|
|
|
|
- current.speed += ( Vec2<double> )mv.rotation( (float)current.rotation ) * (float)TICK * factor;
|
|
|
|
- }
|
|
|
|
- current.energie -= treibstoff * factor;
|
|
|
|
- }
|
|
|
|
- double movementAngle = atan2( current.speed.y, current.speed.x );
|
|
|
|
- bool xg0 = current.speed.x > 0;
|
|
|
|
- bool yg0 = current.speed.y > 0;
|
|
|
|
- if( current.speed.x != 0 )
|
|
|
|
- current.speed.x += 5.0f * cos( movementAngle + PI ) * TICK;
|
|
|
|
- if( current.speed.y != 0 )
|
|
|
|
- current.speed.y += 5.0f * sin( movementAngle + PI ) * TICK;
|
|
|
|
- if( !xg0 && current.speed.x > 0 )
|
|
|
|
- current.speed.x = 0;
|
|
|
|
- if( !yg0 && current.speed.y > 0 )
|
|
|
|
- current.speed.y = 0;
|
|
|
|
- if( current.rSpeed > 0 )
|
|
|
|
- {
|
|
|
|
- current.rSpeed -= (float)(TICK * 0.5);
|
|
|
|
- if( current.rSpeed < 0 )
|
|
|
|
- current.rSpeed = 0;
|
|
|
|
- }
|
|
|
|
- if( current.rSpeed < 0 )
|
|
|
|
- {
|
|
|
|
- current.rSpeed += (float)(TICK * 0.5);
|
|
|
|
- if( current.rSpeed > 0 )
|
|
|
|
- current.rSpeed = 0;
|
|
|
|
- }
|
|
|
|
- if( tastatur[ T_ROT_R ] )
|
|
|
|
- {
|
|
|
|
- Vertex hp;
|
|
|
|
- Vertex mv;
|
|
|
|
- float r;
|
|
|
|
- double treibstoff = 0.25 * ( ( current.wendigkeit + team->wendigkeit ) / 5 )
|
|
|
|
- * tv * ( 100 / ( current.antriebEffizienz + team->antriebEffizienz ) );
|
|
|
|
- current.treibstoffVerbraucht += treibstoff;
|
|
|
|
- double factor = 1;
|
|
|
|
- if( treibstoff > current.energie )
|
|
|
|
- factor = current.energie / treibstoff;
|
|
|
|
- if( ship->zModel()->calcHitPoint( stL, kL * (float)( current.wendigkeit + team->wendigkeit ), "ship", hp, mv, r ) )
|
|
|
|
- {
|
|
|
|
- current.rSpeed += r * (float)TICK * (float)factor;
|
|
|
|
- current.speed += ( Vec2<double> )mv.rotation( (float)current.rotation ) * (float)TICK * factor;
|
|
|
|
- }
|
|
|
|
- current.energie -= treibstoff * factor;
|
|
|
|
- }
|
|
|
|
- if( tastatur[ T_ROT_L ] )
|
|
|
|
- {
|
|
|
|
- Vertex hp;
|
|
|
|
- Vertex mv;
|
|
|
|
- float r;
|
|
|
|
- double treibstoff = 0.25 *( ( current.wendigkeit + team->wendigkeit ) / 5 )
|
|
|
|
- * tv * ( 100 / ( current.antriebEffizienz + team->antriebEffizienz ) );
|
|
|
|
- current.treibstoffVerbraucht += treibstoff;
|
|
|
|
- double factor = 1;
|
|
|
|
- if( treibstoff > current.energie )
|
|
|
|
- factor = current.energie / treibstoff;
|
|
|
|
- if( ship->zModel()->calcHitPoint( stR, kR * (float)( current.wendigkeit + team->wendigkeit ), "ship", hp, mv, r ) )
|
|
|
|
- {
|
|
|
|
- current.rSpeed += r * (float)TICK * (float)factor;
|
|
|
|
- current.speed += ( Vec2<double> )mv.rotation( (float)current.rotation ) * (float)TICK * factor;
|
|
|
|
- }
|
|
|
|
- current.energie -= treibstoff * factor;
|
|
|
|
- }
|
|
|
|
- current.rotation += current.rSpeed * (float)TICK;
|
|
|
|
- ship->setDrehung( (float)current.rotation );
|
|
|
|
- if( current.speed.x || current.speed.y )
|
|
|
|
- current.pos += current.speed * tv;
|
|
|
|
- Vec2< int > gr = zMap->getSize();
|
|
|
|
- while( current.pos.x < 0 )
|
|
|
|
- current.pos.x += gr.x;
|
|
|
|
- while( current.pos.y < 0 )
|
|
|
|
- current.pos.y += gr.y;
|
|
|
|
- while( current.pos.x >= gr.x )
|
|
|
|
- current.pos.x -= gr.x;
|
|
|
|
- while( current.pos.y >= gr.y )
|
|
|
|
- current.pos.y -= gr.y;
|
|
|
|
- ship->setPosition( current.pos );
|
|
|
|
- if( !current.energieAbk )
|
|
|
|
- {
|
|
|
|
- if( current.energie != ( current.maxEnergie + team->maxEnergie ) )
|
|
|
|
- ret = 1;
|
|
|
|
- current.energie += ( current.akkuLeistung + team->akkuLeistung ) * tv;
|
|
|
|
- if( current.energie > ( current.maxEnergie + team->maxEnergie ) )
|
|
|
|
- current.energie = ( current.maxEnergie + team->maxEnergie );
|
|
|
|
- }
|
|
|
|
- if( !current.repAbk )
|
|
|
|
- {
|
|
|
|
- if( current.stabilität != ( current.maxStabilität + team->maxStabilität ) )
|
|
|
|
- ret = 1;
|
|
|
|
- current.stabilität += ( current.reparatur + team->reparatur ) * tv;
|
|
|
|
- if( current.stabilität > ( current.maxStabilität + team->maxStabilität ) )
|
|
|
|
- current.stabilität = ( current.maxStabilität + team->maxStabilität );
|
|
|
|
- }
|
|
|
|
- current.zeitAmLeben += tv;
|
|
|
|
|
|
+ double treibstoff = 0.5 * ( ( beschleunigung + team->beschleunigung ) / 5 )
|
|
|
|
+ * tv * ( 100 / ( antriebEffizienz + team->antriebEffizienz ) );
|
|
|
|
+ treibstoffVerbraucht += treibstoff;
|
|
|
|
+ float factor = 1;
|
|
|
|
+ if( treibstoff > energie )
|
|
|
|
+ factor = (float)( energie / treibstoff );
|
|
|
|
+ impuls( stM, kM * (float)( beschleunigung + team->beschleunigung ) * factor );
|
|
|
|
+ energie -= treibstoff * factor;
|
|
|
|
+ }
|
|
|
|
+ if( tastatur[ T_ROT_R ] )
|
|
|
|
+ {
|
|
|
|
+ double treibstoff = 0.25 * ( ( wendigkeit + team->wendigkeit ) / 5 )
|
|
|
|
+ * tv * ( 100 / ( antriebEffizienz + team->antriebEffizienz ) );
|
|
|
|
+ treibstoffVerbraucht += treibstoff;
|
|
|
|
+ float factor = 1;
|
|
|
|
+ if( treibstoff > energie )
|
|
|
|
+ factor = (float)( energie / treibstoff );
|
|
|
|
+ impuls( stL, kL * (float)( wendigkeit + team->wendigkeit ) * factor );
|
|
|
|
+ energie -= treibstoff * factor;
|
|
|
|
+ }
|
|
|
|
+ if( tastatur[ T_ROT_L ] )
|
|
|
|
+ {
|
|
|
|
+ double treibstoff = 0.25 * ( ( wendigkeit + team->wendigkeit ) / 5 )
|
|
|
|
+ * tv * ( 100 / ( antriebEffizienz + team->antriebEffizienz ) );
|
|
|
|
+ treibstoffVerbraucht += treibstoff;
|
|
|
|
+ float factor = 1;
|
|
|
|
+ if( treibstoff > energie )
|
|
|
|
+ factor = (float)( energie / treibstoff );
|
|
|
|
+ impuls( stR, kR * (float)( wendigkeit + team->wendigkeit ) * factor );
|
|
|
|
+ energie -= treibstoff * factor;
|
|
}
|
|
}
|
|
- else
|
|
|
|
|
|
+ __super::tick( info, tv );
|
|
|
|
+ if( !energieAbk )
|
|
{
|
|
{
|
|
- current.zeitTod += tv;
|
|
|
|
- current.spielZeit++;
|
|
|
|
|
|
+ if( energie != ( maxEnergie + team->maxEnergie ) )
|
|
|
|
+ ret = 1;
|
|
|
|
+ energie += ( akkuLeistung + team->akkuLeistung ) * tv;
|
|
|
|
+ if( energie > ( maxEnergie + team->maxEnergie ) )
|
|
|
|
+ energie = ( maxEnergie + team->maxEnergie );
|
|
}
|
|
}
|
|
|
|
+ if( !repAbk )
|
|
|
|
+ {
|
|
|
|
+ if( stabilität != ( maxStabilität + team->maxStabilität ) )
|
|
|
|
+ ret = 1;
|
|
|
|
+ stabilität += ( reparatur + team->reparatur ) * tv;
|
|
|
|
+ if( stabilität > ( maxStabilität + team->maxStabilität ) )
|
|
|
|
+ stabilität = ( maxStabilität + team->maxStabilität );
|
|
|
|
+ }
|
|
|
|
+ zeitAmLeben += tv;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ zeitTod += tv;
|
|
|
|
+ spielZeit++;
|
|
}
|
|
}
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-void Spieler::render( Bild &zRObj )
|
|
|
|
|
|
+void Spieler::render( Mat3< float > &kamMat, Bild &zRObj )
|
|
{
|
|
{
|
|
- if( !current.amLeben )
|
|
|
|
|
|
+ if( !amLeben )
|
|
return;
|
|
return;
|
|
- ship->render( zRObj );
|
|
|
|
|
|
+ __super::render( kamMat, zRObj );
|
|
}
|
|
}
|
|
|
|
|
|
-void Spieler::renderLeben( Bild &zRObj )
|
|
|
|
|
|
+void Spieler::renderLeben( Mat3< float > &kamMat, Bild &zRObj )
|
|
{
|
|
{
|
|
- if( !team || !current.amLeben )
|
|
|
|
|
|
+ if( !team || !amLeben )
|
|
return;
|
|
return;
|
|
- nText->setPosition( ship->getPosition() - Punkt( 76, (int)( ship->zModel()->maxP.y * ship->getSize() ) + 30 ) );
|
|
|
|
|
|
+ nText->setPosition( (Punkt)( kamMat * getPosition() - Vertex( 76, (int)( zModel()->maxP.y * getSize() ) + 30 ) ) );
|
|
nText->render( zRObj );
|
|
nText->render( zRObj );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 4, 150, team->farbe );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 4, 150, team->farbe );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 25, 150, team->farbe );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 25, 150, team->farbe );
|
|
- int l = (int)( current.stabilität * 100 / ( current.maxStabilität + team->maxStabilität ) * 1.5 + 0.5 );
|
|
|
|
|
|
+ int l = (int)( stabilität * 100 / ( maxStabilität + team->maxStabilität ) * 1.5 + 0.5 );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 1, l, 0xFF00FF00 );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 1, l, 0xFF00FF00 );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 2, l, 0xFF00FF00 );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 2, l, 0xFF00FF00 );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 3, l, 0xFF00FF00 );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 3, l, 0xFF00FF00 );
|
|
- int e = (int)( current.energie * 100 / ( current.maxEnergie + team->maxEnergie ) * 1.5 + 0.5 );
|
|
|
|
|
|
+ int e = (int)( energie * 100 / ( maxEnergie + team->maxEnergie ) * 1.5 + 0.5 );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 26, e, 0xFF0000FF );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 26, e, 0xFF0000FF );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 27, e, 0xFF0000FF );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 27, e, 0xFF0000FF );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 28, e, 0xFF0000FF );
|
|
zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 28, e, 0xFF0000FF );
|
|
- int e2 = (int)( ( current.energie - calculateLaserCost() ) * 100 / ( current.maxEnergie + team->maxEnergie ) * 1.5 + 0.5 );
|
|
|
|
|
|
+ int e2 = (int)( ( energie - calculateLaserCost() ) * 100 / ( maxEnergie + team->maxEnergie ) * 1.5 + 0.5 );
|
|
if( e2 > 0 )
|
|
if( e2 > 0 )
|
|
{
|
|
{
|
|
zRObj.drawLinieV( nText->getX() + e2, nText->getY() + 26, 3, 0xFFFFFFFF );
|
|
zRObj.drawLinieV( nText->getX() + e2, nText->getY() + 26, 3, 0xFFFFFFFF );
|
|
@@ -433,58 +434,46 @@ void Spieler::renderLeben( Bild &zRObj )
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void Spieler::renderMinimap( Bild &zRObj, Karte *zMap, int thisSpielerNummer )
|
|
|
|
-{
|
|
|
|
- if( !team || !current.amLeben )
|
|
|
|
- return;
|
|
|
|
- int x = (int)( ( current.pos.x / zMap->getSize().x ) * 250 + 0.5 ) - 2;
|
|
|
|
- int y = (int)( ( current.pos.y / zMap->getSize().y ) * 250 + 0.5 ) - 2;
|
|
|
|
- if( sNum == thisSpielerNummer )
|
|
|
|
- zRObj.fillCircle( x + 2, y + 2, 4, 0xFFFFFFFF );
|
|
|
|
- zRObj.fillRegion( x, y, 4, 4, team->farbe );
|
|
|
|
- zRObj.fillRegion( x + 1, y + 1, 2, 2, current.farbe );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
void Spieler::setSkill( int art )
|
|
void Spieler::setSkill( int art )
|
|
{
|
|
{
|
|
skillPunkte--;
|
|
skillPunkte--;
|
|
switch( art )
|
|
switch( art )
|
|
{
|
|
{
|
|
case 0: // Max Stabilität
|
|
case 0: // Max Stabilität
|
|
- current.maxStabilität += 10;
|
|
|
|
- current.stabilität += 10;
|
|
|
|
|
|
+ maxStabilität += 10;
|
|
|
|
+ stabilität += 10;
|
|
team->maxStabilität = team->getMaxStabilitätBonus();
|
|
team->maxStabilität = team->getMaxStabilitätBonus();
|
|
break;
|
|
break;
|
|
case 1: // Max Energie
|
|
case 1: // Max Energie
|
|
- current.maxEnergie += 10;
|
|
|
|
|
|
+ maxEnergie += 10;
|
|
team->maxEnergie = team->getMaxEnergieBonus();
|
|
team->maxEnergie = team->getMaxEnergieBonus();
|
|
break;
|
|
break;
|
|
case 2: // Reparatur
|
|
case 2: // Reparatur
|
|
- current.reparatur += 0.15;
|
|
|
|
|
|
+ reparatur += 0.15;
|
|
team->reparatur = team->getReperaturBonus();
|
|
team->reparatur = team->getReperaturBonus();
|
|
break;
|
|
break;
|
|
case 3: // Laser Intensität
|
|
case 3: // Laser Intensität
|
|
- current.laserIntensität += 3;
|
|
|
|
|
|
+ laserIntensität += 3;
|
|
team->laserIntensität = team->getLaserIntensitätBonus();
|
|
team->laserIntensität = team->getLaserIntensitätBonus();
|
|
break;
|
|
break;
|
|
case 4: // Laser Effizienz
|
|
case 4: // Laser Effizienz
|
|
- current.laserEffizienz += 1;
|
|
|
|
|
|
+ laserEffizienz += 1;
|
|
team->laserEffizienz = team->getLaserEffizienzBonus();
|
|
team->laserEffizienz = team->getLaserEffizienzBonus();
|
|
break;
|
|
break;
|
|
case 5: // Laser Tempo
|
|
case 5: // Laser Tempo
|
|
- current.laserTempo += 20;
|
|
|
|
|
|
+ laserTempo += 20;
|
|
team->laserTempo = team->getLaserTempoBonus();
|
|
team->laserTempo = team->getLaserTempoBonus();
|
|
break;
|
|
break;
|
|
case 6: // Beschleunigung
|
|
case 6: // Beschleunigung
|
|
- current.beschleunigung += 1;
|
|
|
|
|
|
+ beschleunigung += 1.75;
|
|
team->beschleunigung = team->getBeschleunigungBonus();
|
|
team->beschleunigung = team->getBeschleunigungBonus();
|
|
break;
|
|
break;
|
|
case 7: // Wendigkeit
|
|
case 7: // Wendigkeit
|
|
- current.wendigkeit += 0.25;
|
|
|
|
|
|
+ wendigkeit += 2.5;
|
|
team->wendigkeit = team->getWendigkeitBonus();
|
|
team->wendigkeit = team->getWendigkeitBonus();
|
|
break;
|
|
break;
|
|
case 8: // Netzwerk
|
|
case 8: // Netzwerk
|
|
- current.netzwerk += 1;
|
|
|
|
|
|
+ netzwerk += 1;
|
|
team->maxStabilität = team->getMaxStabilitätBonus();
|
|
team->maxStabilität = team->getMaxStabilitätBonus();
|
|
team->maxEnergie = team->getMaxEnergieBonus();
|
|
team->maxEnergie = team->getMaxEnergieBonus();
|
|
team->reparatur = team->getReperaturBonus();
|
|
team->reparatur = team->getReperaturBonus();
|
|
@@ -499,19 +488,19 @@ void Spieler::setSkill( int art )
|
|
team->energieSchildEffizienz = team->getEnergieSchildEffizienzBonus();
|
|
team->energieSchildEffizienz = team->getEnergieSchildEffizienzBonus();
|
|
break;
|
|
break;
|
|
case 9: // Akkuleistung
|
|
case 9: // Akkuleistung
|
|
- current.akkuLeistung += 0.12;
|
|
|
|
|
|
+ akkuLeistung += 0.12;
|
|
team->akkuLeistung = team->getAkkuLeistungBonus();
|
|
team->akkuLeistung = team->getAkkuLeistungBonus();
|
|
break;
|
|
break;
|
|
case 10: // Antrieb Effizienz
|
|
case 10: // Antrieb Effizienz
|
|
- current.antriebEffizienz += 10;
|
|
|
|
|
|
+ antriebEffizienz += 10;
|
|
team->antriebEffizienz = team->getAntriebEffizienzBonus();
|
|
team->antriebEffizienz = team->getAntriebEffizienzBonus();
|
|
break;
|
|
break;
|
|
case 11: // Antrieb Effizienz
|
|
case 11: // Antrieb Effizienz
|
|
- current.energieSchild += 1;
|
|
|
|
|
|
+ energieSchild += 1;
|
|
team->energieSchild = team->getEnergieSchildBonus();
|
|
team->energieSchild = team->getEnergieSchildBonus();
|
|
break;
|
|
break;
|
|
case 12: // Antrieb Effizienz
|
|
case 12: // Antrieb Effizienz
|
|
- current.energieSchildEffizienz += 2;
|
|
|
|
|
|
+ energieSchildEffizienz += 2;
|
|
team->energieSchildEffizienz = team->getEnergieSchildEffizienzBonus();
|
|
team->energieSchildEffizienz = team->getEnergieSchildEffizienzBonus();
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -519,38 +508,36 @@ void Spieler::setSkill( int art )
|
|
|
|
|
|
void Spieler::nimmSchaden( double &intensität )
|
|
void Spieler::nimmSchaden( double &intensität )
|
|
{
|
|
{
|
|
- double schieldVal = intensität / 100 * current.energieSchild;
|
|
|
|
- double schieldEVal = schieldVal - schieldVal / 100 * current.energieSchildEffizienz;
|
|
|
|
- if( schieldEVal > current.energie )
|
|
|
|
|
|
+ double schieldVal = intensität / 100 * energieSchild;
|
|
|
|
+ double schieldEVal = schieldVal - schieldVal / 100 * energieSchildEffizienz;
|
|
|
|
+ if( schieldEVal > energie )
|
|
{
|
|
{
|
|
- schieldEVal = current.energie;
|
|
|
|
- schieldVal = schieldEVal / ( 1 - ( current.energieSchildEffizienz / 100 ) );
|
|
|
|
|
|
+ schieldEVal = energie;
|
|
|
|
+ schieldVal = schieldEVal / ( 1 - ( energieSchildEffizienz / 100 ) );
|
|
}
|
|
}
|
|
intensität -= schieldVal;
|
|
intensität -= schieldVal;
|
|
- current.energie -= schieldEVal;
|
|
|
|
- current.stabilität -= intensität;
|
|
|
|
- current.schadenBekommen += intensität;
|
|
|
|
- current.repAbk = 2;
|
|
|
|
|
|
+ energie -= schieldEVal;
|
|
|
|
+ stabilität -= intensität;
|
|
|
|
+ schadenBekommen += intensität;
|
|
|
|
+ repAbk = 2;
|
|
}
|
|
}
|
|
|
|
|
|
void Spieler::calcDeadPlayerObject( Laser *zSchuss )
|
|
void Spieler::calcDeadPlayerObject( Laser *zSchuss )
|
|
{
|
|
{
|
|
Vertex hp;
|
|
Vertex hp;
|
|
- Vertex speed;
|
|
|
|
Polygon2D a;
|
|
Polygon2D a;
|
|
Polygon2D b;
|
|
Polygon2D b;
|
|
Punkt pa;
|
|
Punkt pa;
|
|
Punkt pb;
|
|
Punkt pb;
|
|
- float rot;
|
|
|
|
- if( ship->zModel()->calcHitPoint( ( ( zSchuss->getPos() - zSchuss->getSpeed() ) - ship->getPosition() ).rotation( -ship->getDrehung() ) / ship->getSize(), Vertex( zSchuss->getSpeed() ).rotation( -ship->getDrehung() ), "ship", hp, speed, rot ) )
|
|
|
|
|
|
+ if( calcHitPoint( zSchuss->getPosition() - zSchuss->getSpeed(), zSchuss->getSpeed(), hp ) )
|
|
{
|
|
{
|
|
- ship->zModel()->split( hp, speed.rotation( -ship->getDrehung() ) * 0.1f, "ship", a, b, pa, pb, []()
|
|
|
|
|
|
+ zModel()->split( getObjectPos( hp ), getObjectDir( zSchuss->getSpeed() ) * 0.1f, "ship", a, b, pa, pb, []()
|
|
{
|
|
{
|
|
return rand() / (double)RAND_MAX;
|
|
return rand() / (double)RAND_MAX;
|
|
} );
|
|
} );
|
|
- hp = ( hp * ship->getSize() ).rotation( ship->getDrehung() ) + ship->getPosition();
|
|
|
|
- pa += ship->getPosition();
|
|
|
|
- pb += ship->getPosition();
|
|
|
|
|
|
+ hp = ( hp * getSize() ).rotation( getDrehung() ) + getPosition();
|
|
|
|
+ pa += getPosition();
|
|
|
|
+ pb += getPosition();
|
|
Array< Polygon2D > *npaA = new Array< Polygon2D >();
|
|
Array< Polygon2D > *npaA = new Array< Polygon2D >();
|
|
npaA->add( a );
|
|
npaA->add( a );
|
|
Model2DData *npdA = new Model2DData();
|
|
Model2DData *npdA = new Model2DData();
|
|
@@ -561,87 +548,82 @@ void Spieler::calcDeadPlayerObject( Laser *zSchuss )
|
|
npdB->erstelleModell( npaB );
|
|
npdB->erstelleModell( npaB );
|
|
if( deadPlayer )
|
|
if( deadPlayer )
|
|
deadPlayer->release();
|
|
deadPlayer->release();
|
|
- deadPlayer = new DeadPlayer( npdA, npdB, pa, pb, current.speed * ( rand() / (double)RAND_MAX ), current.speed * ( rand() / (double)RAND_MAX), ship->getDrehung(), ship->getDrehung(), current.rSpeed * (rand() / (float)RAND_MAX), current.rSpeed * (rand() / (float)RAND_MAX), textur );
|
|
|
|
|
|
+ deadPlayer = new DeadPlayer( npdA, npdB, pa, pb, getSpeed() * ( rand() / (double)RAND_MAX ), getSpeed() * ( rand() / (double)RAND_MAX ), getDrehung(), getDrehung(), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), zTextur( "ship" ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void Spieler::machSchaden( double intensität )
|
|
void Spieler::machSchaden( double intensität )
|
|
{
|
|
{
|
|
- current.schadenGemacht += intensität;
|
|
|
|
- current.treffer++;
|
|
|
|
|
|
+ schadenGemacht += intensität;
|
|
|
|
+ treffer++;
|
|
}
|
|
}
|
|
|
|
|
|
void Spieler::addKill()
|
|
void Spieler::addKill()
|
|
{
|
|
{
|
|
- current.kills++;
|
|
|
|
- current.punkte++;
|
|
|
|
|
|
+ kills++;
|
|
|
|
+ punkte++;
|
|
skillPunkte += 2;
|
|
skillPunkte += 2;
|
|
- current.maxReinkAbk--;
|
|
|
|
- if( current.maxReinkAbk < 5 )
|
|
|
|
- current.maxReinkAbk = 5;
|
|
|
|
|
|
+ maxReinkAbk--;
|
|
|
|
+ if( maxReinkAbk < 5 )
|
|
|
|
+ maxReinkAbk = 5;
|
|
}
|
|
}
|
|
|
|
|
|
DeadPlayer *Spieler::sterben()
|
|
DeadPlayer *Spieler::sterben()
|
|
{
|
|
{
|
|
- current.amLeben = 0;
|
|
|
|
- current.tode++;
|
|
|
|
- current.stabilität = 0;
|
|
|
|
- current.reinkAbk += current.maxReinkAbk;
|
|
|
|
- current.maxReinkAbk++;
|
|
|
|
- current.punkte--;
|
|
|
|
- return deadPlayer ? deadPlayer->getThis() : 0;
|
|
|
|
|
|
+ amLeben = 0;
|
|
|
|
+ tode++;
|
|
|
|
+ stabilität = 0;
|
|
|
|
+ reinkAbk += maxReinkAbk;
|
|
|
|
+ maxReinkAbk++;
|
|
|
|
+ punkte--;
|
|
|
|
+ return deadPlayer ? (DeadPlayer*)deadPlayer->getThis() : 0;
|
|
}
|
|
}
|
|
|
|
|
|
void Spieler::wiederbelebung()
|
|
void Spieler::wiederbelebung()
|
|
{
|
|
{
|
|
- current.pos = current.startPos;
|
|
|
|
- current.reinkAbk = current.maxReinkAbk * 2;
|
|
|
|
- current.energie = current.maxEnergie + team->maxEnergie;
|
|
|
|
- current.stabilität = current.maxStabilität + team->maxStabilität;
|
|
|
|
- current.schussAbk = 0;
|
|
|
|
- current.energieAbk = 0;
|
|
|
|
- current.repAbk = 0;
|
|
|
|
- current.speed = Vec2< double >( 0, 0 );
|
|
|
|
- current.rotation = 0;
|
|
|
|
- current.rSpeed = 0;
|
|
|
|
- ship->setDrehung( (float)current.rotation );
|
|
|
|
- ship->setPosition( current.pos );
|
|
|
|
|
|
+ setPosition( startPos );
|
|
|
|
+ reinkAbk = maxReinkAbk * 2;
|
|
|
|
+ energie = maxEnergie + team->maxEnergie;
|
|
|
|
+ stabilität = maxStabilität + team->maxStabilität;
|
|
|
|
+ schussAbk = 0;
|
|
|
|
+ energieAbk = 0;
|
|
|
|
+ repAbk = 0;
|
|
|
|
+ setSpeed( 0, 0 );
|
|
|
|
+ setDrehung( 0 );
|
|
|
|
+ setDrehungSpeed( 0 );
|
|
for( int i = 0; i < T_MAX; i++ )
|
|
for( int i = 0; i < T_MAX; i++ )
|
|
tastatur[ i ] = 0;
|
|
tastatur[ i ] = 0;
|
|
flammenM->setAnimation( -1 );
|
|
flammenM->setAnimation( -1 );
|
|
flammenL->setAnimation( -1 );
|
|
flammenL->setAnimation( -1 );
|
|
flammenR->setAnimation( -1 );
|
|
flammenR->setAnimation( -1 );
|
|
- current.amLeben = 1;
|
|
|
|
|
|
+ amLeben = 1;
|
|
}
|
|
}
|
|
|
|
|
|
-void Spieler::resetToSaveTime( int t, Karte *zMap )
|
|
|
|
|
|
+void Spieler::resetToSaveTime( int t, const WeltInfo &info )
|
|
{
|
|
{
|
|
if( last.spielZeit > t )
|
|
if( last.spielZeit > t )
|
|
return; // this should never be possible
|
|
return; // this should never be possible
|
|
- current = last;
|
|
|
|
- tick( t, zMap );
|
|
|
|
|
|
+ load();
|
|
|
|
+ while( spielZeit < t )
|
|
|
|
+ tick( info, 0 );
|
|
}
|
|
}
|
|
|
|
|
|
-void Spieler::resetToGameTime( int t, Karte *zMap )
|
|
|
|
|
|
+void Spieler::resetToGameTime( int t, const WeltInfo &info )
|
|
{
|
|
{
|
|
- last = current;
|
|
|
|
- tick( t, zMap );
|
|
|
|
|
|
+ save();
|
|
|
|
+ while( spielZeit < t )
|
|
|
|
+ tick( info, 0 );
|
|
}
|
|
}
|
|
|
|
|
|
void Spieler::hatGeschossen()
|
|
void Spieler::hatGeschossen()
|
|
{
|
|
{
|
|
- current.energie -= calculateLaserCost();
|
|
|
|
- current.schussAbk = 1;
|
|
|
|
- current.energieAbk = 1.5;
|
|
|
|
- current.schüsse++;
|
|
|
|
|
|
+ energie -= calculateLaserCost();
|
|
|
|
+ schussAbk = 1;
|
|
|
|
+ energieAbk = 1.5;
|
|
|
|
+ schüsse++;
|
|
}
|
|
}
|
|
|
|
|
|
// constant
|
|
// constant
|
|
-Vec2< double > Spieler::getSpeed() const
|
|
|
|
-{
|
|
|
|
- return current.speed;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
int Spieler::getAccountId() const
|
|
int Spieler::getAccountId() const
|
|
{
|
|
{
|
|
return accountId;
|
|
return accountId;
|
|
@@ -664,7 +646,7 @@ bool Spieler::hatSkill() const
|
|
|
|
|
|
bool Spieler::istAmLeben() const
|
|
bool Spieler::istAmLeben() const
|
|
{
|
|
{
|
|
- return current.amLeben;
|
|
|
|
|
|
+ return amLeben;
|
|
}
|
|
}
|
|
|
|
|
|
// Statistik Werte
|
|
// Statistik Werte
|
|
@@ -680,135 +662,115 @@ Team *Spieler::zTeam() const
|
|
|
|
|
|
int Spieler::getSpielerFarbe() const
|
|
int Spieler::getSpielerFarbe() const
|
|
{
|
|
{
|
|
- return current.farbe;
|
|
|
|
|
|
+ return farbe;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getSchadenBekommen() const
|
|
int Spieler::getSchadenBekommen() const
|
|
{
|
|
{
|
|
- return (int)current.schadenBekommen;
|
|
|
|
|
|
+ return (int)schadenBekommen;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getSchadenGemacht() const
|
|
int Spieler::getSchadenGemacht() const
|
|
{
|
|
{
|
|
- return (int)current.schadenGemacht;
|
|
|
|
|
|
+ return (int)schadenGemacht;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getTreibstoffVerbraucht() const
|
|
int Spieler::getTreibstoffVerbraucht() const
|
|
{
|
|
{
|
|
- return (int)current.treibstoffVerbraucht;
|
|
|
|
|
|
+ return (int)treibstoffVerbraucht;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getSchüsse() const
|
|
int Spieler::getSchüsse() const
|
|
{
|
|
{
|
|
- return current.schüsse;
|
|
|
|
|
|
+ return schüsse;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getTreffer() const
|
|
int Spieler::getTreffer() const
|
|
{
|
|
{
|
|
- return current.treffer;
|
|
|
|
|
|
+ return treffer;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getPunkte() const
|
|
int Spieler::getPunkte() const
|
|
{
|
|
{
|
|
- return current.punkte;
|
|
|
|
|
|
+ return punkte;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getKills() const
|
|
int Spieler::getKills() const
|
|
{
|
|
{
|
|
- return current.kills;
|
|
|
|
|
|
+ return kills;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getTode() const
|
|
int Spieler::getTode() const
|
|
{
|
|
{
|
|
- return current.tode;
|
|
|
|
|
|
+ return tode;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getZeitAmLeben() const
|
|
int Spieler::getZeitAmLeben() const
|
|
{
|
|
{
|
|
- return (int)current.zeitAmLeben;
|
|
|
|
|
|
+ return (int)zeitAmLeben;
|
|
}
|
|
}
|
|
|
|
|
|
int Spieler::getZeitTod() const
|
|
int Spieler::getZeitTod() const
|
|
{
|
|
{
|
|
- return (int)current.zeitTod;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-Punkt Spieler::getPos() const
|
|
|
|
-{
|
|
|
|
- return (Punkt)current.pos;
|
|
|
|
|
|
+ return (int)zeitTod;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamMaxEnergieBonus() const
|
|
double Spieler::getTeamMaxEnergieBonus() const
|
|
{
|
|
{
|
|
- return current.maxEnergie / 100 * current.netzwerk;
|
|
|
|
|
|
+ return maxEnergie / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamMaxStabilitätBonus() const
|
|
double Spieler::getTeamMaxStabilitätBonus() const
|
|
{
|
|
{
|
|
- return current.maxStabilität / 100 * current.netzwerk;
|
|
|
|
|
|
+ return maxStabilität / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamReparaturBonus() const
|
|
double Spieler::getTeamReparaturBonus() const
|
|
{
|
|
{
|
|
- return current.reparatur / 100 * current.netzwerk;
|
|
|
|
|
|
+ return reparatur / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamLaserIntensitätBonus() const
|
|
double Spieler::getTeamLaserIntensitätBonus() const
|
|
{
|
|
{
|
|
- return current.laserIntensität / 100 * current.netzwerk;
|
|
|
|
|
|
+ return laserIntensität / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamLaserEffizienzBonus() const
|
|
double Spieler::getTeamLaserEffizienzBonus() const
|
|
{
|
|
{
|
|
- return current.laserEffizienz / 100 * current.netzwerk;
|
|
|
|
|
|
+ return laserEffizienz / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamAkkuLeistungBonus() const
|
|
double Spieler::getTeamAkkuLeistungBonus() const
|
|
{
|
|
{
|
|
- return current.akkuLeistung / 100 * current.netzwerk;
|
|
|
|
|
|
+ return akkuLeistung / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamLaserTempoBonus() const
|
|
double Spieler::getTeamLaserTempoBonus() const
|
|
{
|
|
{
|
|
- return current.laserTempo / 100 * current.netzwerk;
|
|
|
|
|
|
+ return laserTempo / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamBeschleunigungBonus() const
|
|
double Spieler::getTeamBeschleunigungBonus() const
|
|
{
|
|
{
|
|
- return current.beschleunigung / 100 * current.netzwerk;
|
|
|
|
|
|
+ return beschleunigung / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamWendigkeitBonus() const
|
|
double Spieler::getTeamWendigkeitBonus() const
|
|
{
|
|
{
|
|
- return current.wendigkeit / 100 * current.netzwerk;
|
|
|
|
|
|
+ return wendigkeit / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamAntriebEffizienzBonus() const
|
|
double Spieler::getTeamAntriebEffizienzBonus() const
|
|
{
|
|
{
|
|
- return current.antriebEffizienz / 100 * current.netzwerk;
|
|
|
|
|
|
+ return antriebEffizienz / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamEnergieSchildBonus() const
|
|
double Spieler::getTeamEnergieSchildBonus() const
|
|
{
|
|
{
|
|
- return current.energieSchild / 100 * current.netzwerk;
|
|
|
|
|
|
+ return energieSchild / 100 * netzwerk;
|
|
}
|
|
}
|
|
|
|
|
|
double Spieler::getTeamEnergieSchildEffizienzBonus() const
|
|
double Spieler::getTeamEnergieSchildEffizienzBonus() const
|
|
{
|
|
{
|
|
- return current.energieSchildEffizienz / 100 * current.netzwerk;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// Reference Counting
|
|
|
|
-Spieler *Spieler::getThis()
|
|
|
|
-{
|
|
|
|
- ref++;
|
|
|
|
- return this;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-Spieler *Spieler::release()
|
|
|
|
-{
|
|
|
|
- ref--;
|
|
|
|
- if( !ref )
|
|
|
|
- delete this;
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return energieSchildEffizienz / 100 * netzwerk;
|
|
}
|
|
}
|