Browse Source

Option zum automatischen drehen der Kamera hinzufügen

Kolja Strohm 6 years ago
parent
commit
5f0fbdc200
6 changed files with 43 additions and 9 deletions
  1. 2 2
      Asteroids/Data.cpp
  2. 8 0
      Asteroids/Map.cpp
  3. 1 0
      Asteroids/Map.h
  4. 29 5
      Asteroids/Menü.cpp
  5. 1 0
      Asteroids/Menü.h
  6. 2 2
      Asteroids/Ship.cpp

+ 2 - 2
Asteroids/Data.cpp

@@ -134,9 +134,9 @@ void GameData::reset( Text *zOptionen )
     if( rGen )
         rGen = rGen->release();
     rGen = new RandomGenerator();
-    if( zOptionen->positionVon( '=', 6 ) >= 0 )
+    if( zOptionen->positionVon( '=', 7 ) >= 0 )
     {
-        tmp = zOptionen->getTeilText( zOptionen->positionVon( '=', 6 ) + 1 );
+        tmp = zOptionen->getTeilText( zOptionen->positionVon( '=', 7 ) + 1 );
         rGen->setSeed( (__int64)*tmp );
         tmp->release();
     }

+ 8 - 0
Asteroids/Map.cpp

@@ -71,6 +71,7 @@ Map::Map( KSGClient::MinigameServerClient *klient )
     map->setSize( 200, 200 );
     mapKamera->setPosition( 10, 10 );
     mapKamera->setSize( 200, 200 );
+    autoKam = 0;
 }
 
 // Destruktor
@@ -119,6 +120,11 @@ void Map::reset( Text *zOptionen )
     Text *tmp = zOptionen->getTeilText( zOptionen->positionVon( '=', 5 ) + 1, zOptionen->positionVon( ',', 5 ) );
     bool fortsetzen = (int)*tmp != 0;
     tmp->release();
+    tmp = zOptionen->getTeilText( zOptionen->positionVon( '=', 6 ) + 1, zOptionen->positionVon( ',', 6 ) > 0 ? zOptionen->positionVon( ',', 6 ) : zOptionen->getLength() );
+    autoKam = (int)*tmp != 0;
+    if( !autoKam )
+        kamera->setDrehung( 0 );
+    tmp->release();
     if( fortsetzen && DateiExistiert( "data/Minigames/Asteroids/data/game.save" ) && klient )
     {
         M2Datei sad;
@@ -417,6 +423,8 @@ void Map::render( Bild &zRObj )
 {
     cs.lock();
     kamera->lookAtWorldPos( (int)ship->getPosition().x, (int)ship->getPosition().y );
+    if( autoKam )
+        kamera->setDrehung( -ship->getDrehung() );
     kamera->render( zRObj );
     if( breite >= 800 || höhe >= 500 )
     { // Minimap

+ 1 - 0
Asteroids/Map.h

@@ -22,6 +22,7 @@ private:
     Textur2D *flammenR;
     Bild **aTextur;
     Bild **sTextur;
+    bool autoKam;
 
     Asteroid *createNewAsteroid() override;
 public:

+ 29 - 5
Asteroids/Menü.cpp

@@ -160,6 +160,14 @@ void Men
         opd->addWert( "Fortsetzen", "0" );
         optionen += 0;
     }
+    optionen += ",AutoKam=";
+    if( opd->wertExistiert( "AutoKam" ) )
+        optionen += (int)*opd->zWert( "AutoKam" ) != 0;
+    else
+    {
+        opd->addWert( "AutoKam", "0" );
+        optionen += 0;
+    }
     opd->speichern();
     opd->release();
     map->reset( &optionen );
@@ -260,7 +268,7 @@ Men
         datei->open( Datei::Style::lesen );
     __int64 seed;
     datei->lese( (char*)&seed, 8 );
-    zOptionen->append( ",Fortsetzen=0,Seed=" );
+    zOptionen->append( ",Fortsetzen=0,AutoKam=0,Seed=" );
     zOptionen->append( seed );
     map = new Map( 0 );
     map->reset( zOptionen );
@@ -568,6 +576,8 @@ void Men
         opd->addWert( "Ship", "0" );
     if( !opd->wertExistiert( "Fortsetzen" ) )
         opd->addWert( "Fortsetzen", "0" );
+    if( !opd->wertExistiert( "AutoKam" ) )
+        opd->addWert( "AutoKam", "0" );
     opd->speichern();
     KSGTDatei *stb = new KSGTDatei( "data/Minigames/Asteroids/data/score.ksgt" );
     stb->laden();
@@ -848,9 +858,10 @@ Men
     timer->setTastaturEreignis( _nurNummernTE );
     shipT = initTextFeld( 310, 280, 80, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Raumschiff:" );
     ship = initAuswahlBox( 390, 280, 100, 20, zSchrift, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, { "Normal", "Enterprise" } );
-    fortsetzen = initKontrollKnopf( 310, 320, 180, 20, zSchrift, KontrollKnopf::Style::Normal, "Letztes Spiel fortsetzen" );
-    abbrechen = initKnopf( 310, 360, 85, 20, zSchrift, Knopf::Style::Sichtbar, "Abbrechen" );
-    ok = initKnopf( 405, 360, 85, 20, zSchrift, Knopf::Style::Sichtbar, "Ok" );
+    autoKam = initKontrollKnopf( 310, 320, 180, 25, zSchrift, KontrollKnopf::Style::Normal, "Kamera drehen" );
+    fortsetzen = initKontrollKnopf( 310, 360, 180, 25, zSchrift, KontrollKnopf::Style::Normal, "Letztes Spiel fortsetzen" );
+    abbrechen = initKnopf( 310, 400, 85, 20, zSchrift, Knopf::Style::Sichtbar, "Abbrechen" );
+    ok = initKnopf( 405, 400, 85, 20, zSchrift, Knopf::Style::Sichtbar, "Ok" );
     beendet = 0;
     ref = 1;
 }
@@ -868,6 +879,7 @@ Men
     timer->release();
     shipT->release();
     ship->release();
+    autoKam->release();
     fortsetzen->release();
     abbrechen->release();
     ok->release();
@@ -904,6 +916,11 @@ void Men
         ship->setAuswahl( *opd->zWert( "Ship" ) );
     else
         opd->addWert( "Ship", "0" );
+    autoKam->removeStyle( KontrollKnopf::Style::Selected );
+    if( opd->wertExistiert( "AutoKam" ) )
+        autoKam->setStyle( KontrollKnopf::Style::Selected, (int)*opd->zWert( "AutoKam" ) != 0 );
+    else
+        opd->addWert( "AutoKam", "0" );
     fortsetzen->removeStyle( KontrollKnopf::Style::Selected );
     if( opd->wertExistiert( "Fortsetzen" ) )
         fortsetzen->setStyle( KontrollKnopf::Style::Selected, (int)*opd->zWert( "Fortsetzen" ) != 0 );
@@ -921,6 +938,7 @@ void Men
     aGröße->doMausEreignis( me );
     timer->doMausEreignis( me );
     ship->doMausEreignis( me );
+    autoKam->doMausEreignis( me );
     fortsetzen->doMausEreignis( me );
     bool vera = me.verarbeitet;
     abbrechen->doMausEreignis( me );
@@ -967,6 +985,10 @@ void Men
             opd->setWert( "Ship", Text() += ship->getAuswahl() );
         else
             opd->addWert( "Ship", Text() += ship->getAuswahl() );
+        if( opd->wertExistiert( "AutoKam" ) )
+            opd->setWert( "AutoKam", Text() += (int)autoKam->hatStyle( KontrollKnopf::Style::Selected ) );
+        else
+            opd->addWert( "AutoKam", Text() += (int)autoKam->hatStyle( KontrollKnopf::Style::Selected ) );
         if( opd->wertExistiert( "Fortsetzen" ) )
             opd->setWert( "Fortsetzen", Text() += (int)fortsetzen->hatStyle( KontrollKnopf::Style::Selected ) );
         else
@@ -992,6 +1014,7 @@ bool Men
     ret |= aGröße->tick( tickVal );
     ret |= timer->tick( tickVal );
     ret |= ship->tick( tickVal );
+    ret |= autoKam->tick( tickVal );
     ret |= fortsetzen->tick( tickVal );
     ret |= abbrechen->tick( tickVal );
     ret |= ok->tick( tickVal );
@@ -1009,6 +1032,7 @@ void Men
     timerT->render( zRObj );
     timer->render( zRObj );
     shipT->render( zRObj );
+    autoKam->render( zRObj );
     fortsetzen->render( zRObj );
     abbrechen->render( zRObj );
     ok->render( zRObj );
@@ -1191,7 +1215,7 @@ void Men
         break;
     case 1:
         ram->setPosition( 300, 110 );
-        ram->setSize( 200, 280 );
+        ram->setSize( 200, 320 );
         zRObj.alphaRegion( ram->getX(), ram->getY(), ram->getBreite(), ram->getHeight(), 0xD0000000 );
         ram->render( zRObj );
         optionenF->render( zRObj );

+ 1 - 0
Asteroids/Menü.h

@@ -144,6 +144,7 @@ private:
     TextFeld *timer;
     TextFeld *shipT;
     AuswahlBox *ship;
+    KontrollKnopf *autoKam;
     KontrollKnopf *fortsetzen;
     Knopf *abbrechen;
     Knopf *ok;

+ 2 - 2
Asteroids/Ship.cpp

@@ -122,11 +122,11 @@ bool Ship::tick( const WeltInfo &info, double zeit )
     }
     if( ( tastenstände | 2 ) == tastenstände )
     {
-        impuls( getWorldPos(stL), getWorldDir(kL) * (float)zeit * 10 );
+        impuls( getWorldPos(stL), getWorldDir(kL) * ((float)zeit * 10) );
     }
     if( ( tastenstände | 4 ) == tastenstände )
     {
-        impuls( getWorldPos(stR), getWorldDir(kR) * (float)zeit * 10 );
+        impuls( getWorldPos(stR), getWorldDir(kR) * ((float)zeit * 10) );
     }
     speed /= 1.01f;
     rSpeed /= 1.01f;