Browse Source

Nutzt jetzt neues 2D Framework

Kolja Strohm 5 years ago
parent
commit
82e44dba19
9 changed files with 102 additions and 245 deletions
  1. 1 1
      Asteroids/Karte.cpp
  2. 14 39
      Asteroids/Laser.cpp
  3. 6 11
      Asteroids/Laser.h
  4. 22 17
      Asteroids/Spiel.cpp
  5. 2 0
      Asteroids/Spiel.h
  6. 8 30
      Asteroids/SpielObjekt.cpp
  7. 2 9
      Asteroids/SpielObjekt.h
  8. 42 125
      Asteroids/Spieler.cpp
  9. 5 13
      Asteroids/Spieler.h

+ 1 - 1
Asteroids/Karte.cpp

@@ -94,7 +94,7 @@ SpielObjekt *Karte::createObjekt( int oNum ) const
             for( auto i = &ressources->getArray(); i && i->set && i->var; i = i->next )
             {
                 if( i->var->getId() == o.var->m2d )
-                    ret->setModelData( i->var->zReccourceM2()->getThis() );
+                    ret->setModel( i->var->zReccourceM2()->getThis() );
             }
             return ret;
         }

+ 14 - 39
Asteroids/Laser.cpp

@@ -4,32 +4,32 @@
 // Inhalt der Laser Klasse aus Laser.h
 // Konstruktor
 Laser::Laser( int id, Vec2< double > pos, Vec2< double > speed, int sNum, double intensity )
+    : Object2D()
 {
 	this->id = id;
-	this->pos = pos;
-	this->speed = speed;
+    setPosition( pos );
+    setSpeed( speed );
 	this->sNum = sNum;
 	this->intensity = intensity;
-	ref = 1;
 }
 
 // nicht constant
-void Laser::tick( double tickVal, Karte *zMap )
+bool Laser::tick( const WeltInfo &info, double tickVal )
 {
-	pos += speed * tickVal;
-	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;
+    Object2D::tick( info, tickVal );
 	intensity -= tickVal * 2;
+    return 0;
 }
 
+void Laser::render( Mat3< float > &kamMat, Bild &zRObj )
+{}
+
 // constant
+Rect2< float > Laser::getBoundingBox() const
+{
+    return Rect2< float >();
+}
+
 int Laser::getId() const
 {
 	return id;
@@ -40,32 +40,7 @@ int Laser::getSpieler() const
 	return sNum;
 }
 
-Vec2< double > Laser::getPos() const
-{
-	return pos;
-}
-
-Vec2< double > Laser::getSpeed() const
-{
-	return speed;
-}
-
 double Laser::getIntensity() const
 {
 	return intensity;
-}
-
-// Reference Counting
-Laser *Laser::getThis()
-{
-	ref++;
-	return this;
-}
-
-Laser *Laser::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
 }

+ 6 - 11
Asteroids/Laser.h

@@ -2,17 +2,15 @@
 #define Laser_H
 
 #include <Vec2.h>
+#include <Welt2D.h>
 using namespace Framework;
 
 class Karte;
 
-class Laser
+class Laser : public Object2D
 {
 private:
-	int ref;
 	int id;
-	Vec2< double > pos;
-	Vec2< double > speed;
 	double intensity;
 	int sNum;
 
@@ -20,16 +18,13 @@ public:
 	// Konstruktor
 	Laser( int id, Vec2< double > pos, Vec2< double > speed, int sNum, double intensity );
 	// nicht constant
-	void tick( double tickVal, Karte *zMap );
+	bool tick( const WeltInfo &info, double tickVal ) override;
+    void render( Mat3< float > &kamMat, Bild &zRObj ) override;
 	// constant
-	int getId() const;
+    Rect2< float > getBoundingBox() const override;
+    int getId() const;
 	int getSpieler() const;
-	Vec2< double > getPos() const;
-	Vec2< double > getSpeed() const;
 	double getIntensity() const;
-	// Reference Counting
-	Laser *getThis();
-	Laser *release();
 };
 
 #endif

+ 22 - 17
Asteroids/Spiel.cpp

@@ -28,6 +28,9 @@ Spiel::Spiel()
 	spieler = new RCArray< Spieler >();
 	shots = new RCArray< Laser >();
 	objekte = new RCArray< SpielObjekt >();
+    welt = new Welt2D();
+    welt->setCircular( 1 );
+    welt->setAirResistance( 0.01f );
 	psqldb = 0;
 	spielId = 0;
 	karteId = 0;
@@ -50,6 +53,7 @@ Spiel::~Spiel()
 	stat->release();
 	spieler->release();
 	objekte->release();
+    welt->release();
 	if( psqldb )
 		psqldb->release();
 	if( karte )
@@ -124,8 +128,12 @@ void Spiel::setSpielerNummern( int anzahl, Array< int > *spielerNummern )
 			teams->set( karte->createTeam( i ), i );
 		stat->setTeamNamen( sts->teamName->getThis() );
 		int objektAnzahl = karte->getObjektAnzahl();
-		for( int i = 0; i < objektAnzahl; i++ )
-			objekte->set( karte->createObjekt( i ), i );
+        for( int i = 0; i < objektAnzahl; i++ )
+        {
+            SpielObjekt *obj = karte->createObjekt( i );
+            welt->addObject( obj->getThis() );
+            objekte->set( obj, i );
+        }
 	}
 	for( int i = 0; i < anzahl; i++ )
 	{
@@ -148,6 +156,7 @@ void Spiel::setSpielerNummern( int anzahl, Array< int > *spielerNummern )
 			tmp->setTeam( teams->get( team ) );
 			teams->z( team )->spieler->add( tmp );
 		}
+        welt->addObject( tmp->getThis() );
 		spieler->set( tmp, i );
 	}
 	for( int i = 0; i < anzahl; i++ )
@@ -317,18 +326,17 @@ void Spiel::nachricht( int accountId, int len, char *bytes )
 
 void Spiel::tick( double zeit )
 {
-	// Objekte Updaten
-	int objektAnzahl = objekte->getEintragAnzahl();
-	for( int i = 0; i < objektAnzahl; i++ )
-		objekte->z( i )->tick();
+    // Objekte updaten
+    welt->tick( zeit );
 	// Spieler Updaten
 	for( int i = 0; i < spielerAnzahl; i++ )
 	{
 		Spieler *tmp = spieler->z( i );
 		if( tmp )
 		{
-			if( tmp->tick( zeit, karte ) == 1 )
+			if( tmp->doNeedWiederbelebung() )
 			{ // Wiederbelebung
+                tmp->wiederbeleben();
 				for( int j = 0; j < spielerAnzahl; j++ )
 				{
 					Spieler *s = spieler->z( j );
@@ -338,14 +346,8 @@ void Spiel::tick( double zeit )
 			}
 		}
 	}
-	// Schüsse Updaten
-	int anz = shots->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		if( shots->z( i ) )
-			shots->z( i )->tick( zeit, karte );
-	}
 	// Schüsse Collision
+    int anz = shots->getEintragAnzahl();
 	for( int i = 0; i < anz; i++ )
 	{
 		Laser *tmp = shots->z( i );
@@ -359,6 +361,7 @@ void Spiel::tick( double zeit )
 					if( s )
 						s->zKlient()->sendeTreffer( tmp->getId(), -1, spielZeit );
 				}
+                welt->removeObject( tmp );
 				shots->remove( i );
 				anz--;
 				i--;
@@ -369,8 +372,8 @@ void Spiel::tick( double zeit )
 				for( int j = 0; j < spielerAnzahl; j++ )
 				{
 					Spieler *s = spieler->z( j );
-					if( s && s->zTeam() && s->zTeam()->id != team && ( s->istTreffer( tmp->getPos() ) ||
-						s->istTreffer( tmp->getPos() + karte->getSize() ) || s->istTreffer( tmp->getPos() - karte->getSize() ) ) )
+					if( s && s->zTeam() && s->zTeam()->id != team && ( s->istTreffer( tmp->getPosition() ) ||
+						s->istTreffer( tmp->getPosition() + karte->getSize() ) || s->istTreffer( tmp->getPosition() - karte->getSize() ) ) )
 					{ // Treffer
                         double intens = tmp->getIntensity() * ( ( tmp->getSpeed() - s->getSpeed() ).getLength() / 200 );
 						bool kill = s->nimmSchaden( intens );
@@ -391,6 +394,7 @@ void Spiel::tick( double zeit )
 							if( teams->z( team - 1 )->punkte == teams->z( team - 1 )->maxPunkte )
 								ende = 1;
 						}
+                        welt->removeObject( tmp );
 						shots->remove( i );
 						anz--;
 						i--;
@@ -409,11 +413,12 @@ void Spiel::tick( double zeit )
 			Laser *nL = tmp->getLaser( nextSchussId++ );
 			if( nL )
 			{
+                welt->addObject( nL->getThis() );
 				shots->add( nL );
 				for( int j = 0; j < spielerAnzahl; j++ )
 				{
 					if( spieler->z( j ) && spieler->z( j )->zKlient() )
-						spieler->z( j )->zKlient()->sendeSchuss( nL->getId(), nL->getSpieler(), nL->getPos(), nL->getSpeed(), nL->getIntensity(), spielZeit );
+						spieler->z( j )->zKlient()->sendeSchuss( nL->getId(), nL->getSpieler(), nL->getPosition(), nL->getSpeed(), nL->getIntensity(), spielZeit );
 				}
 			}
 		}

+ 2 - 0
Asteroids/Spiel.h

@@ -7,6 +7,7 @@
 #include "Spieler.h"
 #include "Karte.h"
 #include "SpielObjekt.h"
+#include <Welt2D.h>
 
 class Statistik;
 class StatistikV;
@@ -22,6 +23,7 @@ private:
 	RCArray< Spieler > *spieler;
 	RCArray< Laser > *shots;
 	RCArray< SpielObjekt > *objekte;
+    Welt2D *welt;
 	SSDatenbankV *psqldb;
 	int spielId;
 	int karteId;

+ 8 - 30
Asteroids/SpielObjekt.cpp

@@ -4,10 +4,9 @@
 // Inhalt der SpielObjekt Klasse aus SpielObjekt.h
 // Konstruktor
 SpielObjekt::SpielObjekt( ObjektStr *zStr )
+    : Model2DObject()
 {
-	pos = zStr->pos;
 	id = zStr->id;
-	mdl = new Model2D();
 	style = zStr->style;
 	stability = zStr->maxStability;
 	energie = zStr->maxEnergie;
@@ -17,23 +16,16 @@ SpielObjekt::SpielObjekt( ObjektStr *zStr )
 	reparatur = zStr->reparatur;
 	akkuLeistung = zStr->akkuLeistung;
 	team = 0;
-	ref = 1;
 }
 
 // Destruktor
 SpielObjekt::~SpielObjekt()
 {
-	mdl->release();
 	if( team )
 		team->release();
 }
 
 // nicht constant
-void SpielObjekt::setModelData( Model2DData *data )
-{
-	mdl->setModel( data );
-}
-
 void SpielObjekt::setTeam( Team *team )
 {
 	if( this->team )
@@ -41,17 +33,17 @@ void SpielObjekt::setTeam( Team *team )
 	this->team = team;
 }
 
-void SpielObjekt::tick()
+bool SpielObjekt::tick( const WeltInfo &info, double zeit )
 {
-	repAbk -= TICK;
+	repAbk -= zeit;
 	if( repAbk < 0 )
 		repAbk = 0;
-	akkuAbk -= TICK;
+	akkuAbk -= zeit;
 	if( akkuAbk < 0 )
 		akkuAbk = 0;
 	if( !repAbk )
 	{
-		stability += reparatur * TICK;
+		stability += reparatur * zeit;
 		if( stability > maxStability )
 			stability = maxStability;
 	}
@@ -59,36 +51,22 @@ void SpielObjekt::tick()
 	{
 		if( !team )
 		{
-			energie -= akkuLeistung * TICK;
+			energie -= akkuLeistung * zeit;
 			if( energie < 0 )
 				energie = 0;
 		}
 		else
 		{
-			energie += akkuLeistung * TICK;
+			energie += akkuLeistung * zeit;
 			if( energie > maxEnergie )
 				energie = maxEnergie;
 		}
 	}
+    return Model2DObject::tick( info, zeit );
 }
 
 // constant
 Team *SpielObjekt::zTeam() const
 {
 	return team;
-}
-
-// Reference Counting
-SpielObjekt *SpielObjekt::getThis()
-{
-	ref++;
-	return this;
-}
-
-SpielObjekt *SpielObjekt::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
 }

+ 2 - 9
Asteroids/SpielObjekt.h

@@ -8,12 +8,10 @@
 
 using namespace Framework;
 
-class SpielObjekt
+class SpielObjekt : public Model2DObject
 {
 private:
-	Vec2< double > pos;
 	int id;
-	Model2D *mdl;
 	int style;
 	double stability;
 	double energie;
@@ -25,7 +23,6 @@ private:
 	double repAbk;
 	double akkuAbk;
 	Team *team;
-	int ref;
 
 public:
 	// Konstruktor
@@ -33,14 +30,10 @@ public:
 	// Destruktor
 	~SpielObjekt();
 	// nicht constant
-	void setModelData( Model2DData *data );
 	void setTeam( Team *team );
-	void tick();
+	bool tick( const WeltInfo &info, double zeit ) override;
 	// constant
 	Team *zTeam() const;
-	// Reference Counting
-	SpielObjekt *getThis();
-	SpielObjekt *release();
 };
 
 #endif

+ 42 - 125
Asteroids/Spieler.cpp

@@ -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()
 {

+ 5 - 13
Asteroids/Spieler.h

@@ -22,7 +22,7 @@ enum TastaturStatus
 	T_MAX
 };
 
-class Spieler
+class Spieler : public Model2DObject
 {
 private:
     // antrieb
@@ -32,12 +32,10 @@ private:
     Vertex kR;
     Vertex stM;
     Vertex kM;
-    float rSpeed;
 
 	int accountId;
 	int sNum;
 	int farbe;
-	Model2D *ship;
 	Team *team;
 	Klient *klient;
 	bool tastatur[ T_MAX ];
@@ -47,12 +45,8 @@ private:
 	double repAbk;
 	double reinkAbk;
 	int maxReinkAbk;
-	int ref;
 	// Raumschiff Eigenschaften
 	Vec2< double > startPos;
-	Vec2< double > pos;
-	Vec2< double > speed;
-	double rotation;
 	double beschleunigung;
     double beschleunigungStart;
 	double energie;
@@ -83,6 +77,7 @@ private:
 	int tode;
 	double zeitAmLeben;
 	double zeitTod;
+    bool needWiederbelebung;
 
 public:
 	// Konstruktor
@@ -96,24 +91,20 @@ public:
 	void setAccountId( int id );
 	void setTeam( Team *team );
 	void setSpielerFarbe( int farbe );
-	void setGeschwindigkeit( double xSpeed, double ySpeed );
-	void setPosition( Vec2< double > p );
 	void setKlient( Klient *klient );
 	bool setTastataturStatus( TastaturStatus ts, bool aktiv );
-	int tick( double zeit, Karte *zMap );
+	bool tick( const WeltInfo &info, double zeit ) override;
 	bool setSkill( int art );
 	Laser *getLaser( int sId );
 	bool nimmSchaden( double &intensity );
 	void machSchaden( double intensity, bool kill );
+    void wiederbeleben();
 	// constant
 	int getAccountId() const;
 	bool istOnline() const;
 	Klient *zKlient() const;
 	bool istTreffer( Vec2< float > pos ) const;
 	// Raumschiff Eigenschaften
-	Vec2< double > getPos() const;
-	Vec2< double > getSpeed() const;
-	double getRotation() const;
 	double getTeamMaxEnergieBonus() const;
 	double getTeamMaxStabilityBonus() const;
 	double getTeamReparaturBonus() const;
@@ -141,6 +132,7 @@ public:
 	int getTode() const;
 	int getZeitAmLeben() const;
 	int getZeitTod() const;
+    bool doNeedWiederbelebung() const;
 	// Reference Counting
 	Spieler *getThis();
 	Spieler *release();