|
@@ -9,11 +9,11 @@
|
|
|
// Inhalt der Spieler Klasse aus Spieler.h
|
|
|
// Konstruktor
|
|
|
Spieler::Spieler( SpielerStr *zStr )
|
|
|
+ : Model2DObject()
|
|
|
{
|
|
|
accountId = 0;
|
|
|
sNum = zStr->id;
|
|
|
farbe = 0;
|
|
|
- ship = new Model2D();
|
|
|
team = 0;
|
|
|
klient = 0;
|
|
|
for( int i = 0; i < T_MAX; i++ )
|
|
@@ -24,11 +24,7 @@ Spieler::Spieler( SpielerStr *zStr )
|
|
|
repAbk = 0;
|
|
|
reinkAbk = 0;
|
|
|
maxReinkAbk = 5;
|
|
|
- ref = 1;
|
|
|
startPos = zStr->pos;
|
|
|
- pos = zStr->pos;
|
|
|
- speed = Vec2< double >( 0, 0 );
|
|
|
- rotation = zStr->rot;
|
|
|
beschleunigung = zStr->beschleunigung;
|
|
|
beschleunigungStart = zStr->beschleunigung;
|
|
|
energie = zStr->maxEnergie;
|
|
@@ -58,15 +54,12 @@ Spieler::Spieler( SpielerStr *zStr )
|
|
|
tode = 0;
|
|
|
zeitAmLeben = 0;
|
|
|
zeitTod = 0;
|
|
|
- rSpeed = 0;
|
|
|
- ship->setPosition( pos );
|
|
|
- ship->setDrehung( (float)rotation );
|
|
|
+ needWiederbelebung = 0;
|
|
|
}
|
|
|
|
|
|
// Destruktor
|
|
|
Spieler::~Spieler()
|
|
|
{
|
|
|
- ship->release();
|
|
|
if( team )
|
|
|
team->release();
|
|
|
if( klient )
|
|
@@ -140,7 +133,7 @@ void Spieler::setModelData( Model2DData *data )
|
|
|
kL.normalize();
|
|
|
kR.normalize();
|
|
|
kM.normalize();
|
|
|
- ship->setModel( data );
|
|
|
+ setModel( data );
|
|
|
}
|
|
|
|
|
|
void Spieler::setAccountId( int id )
|
|
@@ -160,17 +153,6 @@ void Spieler::setSpielerFarbe( int farbe )
|
|
|
this->farbe = farbe;
|
|
|
}
|
|
|
|
|
|
-void Spieler::setGeschwindigkeit( double xSpeed, double ySpeed )
|
|
|
-{
|
|
|
- speed = Vec2< double >( xSpeed, ySpeed );
|
|
|
-}
|
|
|
-
|
|
|
-void Spieler::setPosition( Vec2< double > p )
|
|
|
-{
|
|
|
- pos = p;
|
|
|
- ship->setPosition( pos );
|
|
|
-}
|
|
|
-
|
|
|
void Spieler::setKlient( Klient *klient )
|
|
|
{
|
|
|
if( this->klient )
|
|
@@ -186,7 +168,7 @@ bool Spieler::setTastataturStatus( TastaturStatus ts, bool aktiv )
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-int Spieler::tick( double zeit, Karte *zMap )
|
|
|
+bool Spieler::tick( const WeltInfo& info, double zeit )
|
|
|
{
|
|
|
if( !team )
|
|
|
return 0;
|
|
@@ -195,22 +177,8 @@ int Spieler::tick( double zeit, Karte *zMap )
|
|
|
reinkAbk = 0;
|
|
|
if( !reinkAbk && !amLeben )
|
|
|
{ // Wiederbelebung
|
|
|
- pos = startPos;
|
|
|
- reinkAbk = maxReinkAbk * 2;
|
|
|
- energie = maxEnergie + team->maxEnergie;
|
|
|
- stability = maxStability + team->maxStability;
|
|
|
- schussAbk = 0;
|
|
|
- energieAbk = 0;
|
|
|
- repAbk = 0;
|
|
|
- speed = Vec2< double >( 0, 0 );
|
|
|
- rotation = 0;
|
|
|
- rSpeed = 0;
|
|
|
- ship->setPosition( pos );
|
|
|
- ship->setDrehung( (float)rotation );
|
|
|
- for( int i = 0; i < T_MAX; i++ )
|
|
|
- tastatur[ i ] = 0;
|
|
|
- amLeben = 1;
|
|
|
- return 1;
|
|
|
+ needWiederbelebung = 1;
|
|
|
+ return 0;
|
|
|
}
|
|
|
if( amLeben )
|
|
|
{
|
|
@@ -225,96 +193,38 @@ int Spieler::tick( double zeit, Karte *zMap )
|
|
|
repAbk = 0;
|
|
|
if( tastatur[ T_GAS ] )
|
|
|
{
|
|
|
- Vertex hp;
|
|
|
- Vertex mv;
|
|
|
- float r;
|
|
|
double treibstoff = 0.5 * ( ( beschleunigung + team->beschleunigung ) / 5 )
|
|
|
* zeit * ( 100 / ( antriebEffizienz + team->antriebEffizienz ) );
|
|
|
treibstoffVerbraucht += treibstoff;
|
|
|
- double factor = 1;
|
|
|
+ float factor = 1;
|
|
|
if( treibstoff > energie )
|
|
|
- factor = energie / treibstoff;
|
|
|
- if( ship->zModel()->calcHitPoint( stM, kM * (float)( beschleunigung + team->beschleunigung ), ( char* )"ship", hp, mv, r ) )
|
|
|
- {
|
|
|
- speed += ( Vec2<double> )mv.rotation( (float)rotation ) * (float)zeit * factor;
|
|
|
- }
|
|
|
+ factor = (float)(energie / treibstoff);
|
|
|
+ impuls( stM, kM * (float)( beschleunigung + team->beschleunigung ) * factor );
|
|
|
energie -= treibstoff * factor;
|
|
|
}
|
|
|
- double movementAngle = atan2( speed.y, speed.x );
|
|
|
- bool xg0 = speed.x > 0;
|
|
|
- bool yg0 = speed.y > 0;
|
|
|
- if( speed.x != 0 )
|
|
|
- speed.x += 5.0f * cos( movementAngle + PI ) * zeit;
|
|
|
- if( speed.y != 0 )
|
|
|
- speed.y += 5.0f * sin( movementAngle + PI ) * zeit;
|
|
|
- if( !xg0 && speed.x > 0 )
|
|
|
- speed.x = 0;
|
|
|
- if( !yg0 && speed.y > 0 )
|
|
|
- speed.y = 0;
|
|
|
- if( rSpeed > 0 )
|
|
|
- {
|
|
|
- rSpeed -= (float)( zeit * 0.5 );
|
|
|
- if( rSpeed < 0 )
|
|
|
- rSpeed = 0;
|
|
|
- }
|
|
|
- if( rSpeed < 0 )
|
|
|
- {
|
|
|
- rSpeed += (float)( zeit * 0.5 );
|
|
|
- if( rSpeed > 0 )
|
|
|
- rSpeed = 0;
|
|
|
- }
|
|
|
if( tastatur[ T_ROT_R ] )
|
|
|
{
|
|
|
- Vertex hp;
|
|
|
- Vertex mv;
|
|
|
- float r;
|
|
|
double treibstoff = 0.25 * ( ( wendigkeit + team->wendigkeit ) / 5 )
|
|
|
* zeit * ( 100 / ( antriebEffizienz + team->antriebEffizienz ) );
|
|
|
treibstoffVerbraucht += treibstoff;
|
|
|
- double factor = 1;
|
|
|
+ float factor = 1;
|
|
|
if( treibstoff > energie )
|
|
|
- factor = energie / treibstoff;
|
|
|
- if( ship->zModel()->calcHitPoint( stL, kL * (float)( wendigkeit + team->wendigkeit ), ( char* )"ship", hp, mv, r ) )
|
|
|
- {
|
|
|
- rSpeed += r * (float)zeit * (float)factor;
|
|
|
- speed += ( Vec2<double> )mv.rotation( (float)rotation ) * (float)zeit * factor;
|
|
|
- }
|
|
|
+ factor = (float)( energie / treibstoff );
|
|
|
+ impuls( stL, kL * (float)( wendigkeit + team->wendigkeit ) * factor );
|
|
|
energie -= treibstoff * factor;
|
|
|
}
|
|
|
if( tastatur[ T_ROT_L ] )
|
|
|
{
|
|
|
- Vertex hp;
|
|
|
- Vertex mv;
|
|
|
- float r;
|
|
|
double treibstoff = 0.25 * ( ( wendigkeit + team->wendigkeit ) / 5 )
|
|
|
* zeit * ( 100 / ( antriebEffizienz + team->antriebEffizienz ) );
|
|
|
treibstoffVerbraucht += treibstoff;
|
|
|
- double factor = 1;
|
|
|
+ float factor = 1;
|
|
|
if( treibstoff > energie )
|
|
|
- factor = energie / treibstoff;
|
|
|
- if( ship->zModel()->calcHitPoint( stR, kR * (float)( wendigkeit + team->wendigkeit ), ( char* )"ship", hp, mv, r ) )
|
|
|
- {
|
|
|
- rSpeed += r * (float)zeit * (float)factor;
|
|
|
- speed += ( Vec2<double> )mv.rotation( (float)rotation ) * zeit * factor;
|
|
|
- }
|
|
|
+ factor = (float)( energie / treibstoff );
|
|
|
+ impuls( stR, kR * (float)( wendigkeit + team->wendigkeit ) * factor );
|
|
|
energie -= treibstoff * factor;
|
|
|
}
|
|
|
- rotation += rSpeed * (float)zeit;
|
|
|
- ship->setDrehung( (float)rotation );
|
|
|
- if( speed.x || speed.y )
|
|
|
- {
|
|
|
- pos += speed * zeit;
|
|
|
- Vec2< int > gr = zMap->getSize();
|
|
|
- if( pos.x < 0 )
|
|
|
- pos.x += gr.x;
|
|
|
- if( pos.y < 0 )
|
|
|
- pos.y += gr.y;
|
|
|
- if( pos.x >= gr.x )
|
|
|
- pos.x -= gr.x;
|
|
|
- if( pos.y >= gr.y )
|
|
|
- pos.y -= gr.y;
|
|
|
- ship->setPosition( pos );
|
|
|
- }
|
|
|
+ Model2DObject::tick( info, zeit );
|
|
|
if( !energieAbk )
|
|
|
{
|
|
|
energie += ( akkuLeistung + team->akkuLeistung ) * zeit;
|
|
@@ -367,11 +277,11 @@ bool Spieler::setSkill( int art )
|
|
|
team->laserTempo = team->getLaserTempoBonus();
|
|
|
break;
|
|
|
case 6: // Beschleunigung
|
|
|
- beschleunigung += 1;
|
|
|
+ beschleunigung += 1.75;
|
|
|
team->beschleunigung = team->getBeschleunigungBonus();
|
|
|
break;
|
|
|
case 7: // Wendigkeit
|
|
|
- wendigkeit += 0.25;
|
|
|
+ wendigkeit += 2.5;
|
|
|
team->wendigkeit = team->getWendigkeitBonus();
|
|
|
break;
|
|
|
case 8: // Netzwerk
|
|
@@ -424,7 +334,7 @@ Laser *Spieler::getLaser( int sId )
|
|
|
shots++;
|
|
|
Vec2< double > sSpeed = ( Vec2<double>( cos( rotation ), sin( rotation ) ) * ( laserTempo + team->laserTempo ) );
|
|
|
sSpeed += speed;
|
|
|
- return new Laser( sId, pos, sSpeed, sNum, laserIntensity + team->laserIntensity );
|
|
|
+ return new Laser( sId, getPosition(), sSpeed, sNum, laserIntensity + team->laserIntensity );
|
|
|
}
|
|
|
|
|
|
bool Spieler::nimmSchaden( double &intensity )
|
|
@@ -470,6 +380,23 @@ void Spieler::machSchaden( double intensity, bool kill )
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void Spieler::wiederbeleben()
|
|
|
+{
|
|
|
+ setPosition( startPos );
|
|
|
+ reinkAbk = maxReinkAbk * 2;
|
|
|
+ energie = maxEnergie + team->maxEnergie;
|
|
|
+ stability = maxStability + team->maxStability;
|
|
|
+ schussAbk = 0;
|
|
|
+ energieAbk = 0;
|
|
|
+ repAbk = 0;
|
|
|
+ setSpeed( 0, 0 );
|
|
|
+ setDrehung( 0 );
|
|
|
+ setDrehungSpeed( 0 );
|
|
|
+ for( int i = 0; i < T_MAX; i++ )
|
|
|
+ tastatur[ i ] = 0;
|
|
|
+ amLeben = 1;
|
|
|
+}
|
|
|
+
|
|
|
// constant
|
|
|
int Spieler::getAccountId() const
|
|
|
{
|
|
@@ -490,25 +417,10 @@ bool Spieler::istTreffer( Vec2< float > pos ) const
|
|
|
{
|
|
|
if( !amLeben )
|
|
|
return 0;
|
|
|
- return ship->istPunktInnen( pos );
|
|
|
+ return istPunktInnen( pos );
|
|
|
}
|
|
|
|
|
|
// Raumschiff Eigenschaften
|
|
|
-Vec2< double > Spieler::getPos() const
|
|
|
-{
|
|
|
- return pos;
|
|
|
-}
|
|
|
-
|
|
|
-Vec2< double > Spieler::getSpeed() const
|
|
|
-{
|
|
|
- return speed;
|
|
|
-}
|
|
|
-
|
|
|
-double Spieler::getRotation() const
|
|
|
-{
|
|
|
- return rotation;
|
|
|
-}
|
|
|
-
|
|
|
double Spieler::getTeamMaxEnergieBonus() const
|
|
|
{
|
|
|
return maxEnergie / 100 * netzwerk;
|
|
@@ -640,6 +552,11 @@ int Spieler::getZeitTod() const
|
|
|
return (int)zeitTod;
|
|
|
}
|
|
|
|
|
|
+bool Spieler::doNeedWiederbelebung() const
|
|
|
+{
|
|
|
+ return needWiederbelebung;
|
|
|
+}
|
|
|
+
|
|
|
// Reference Counting
|
|
|
Spieler *Spieler::getThis()
|
|
|
{
|