From ad586bcf32a7a11a930a7b7773925a3acff1bc68 Mon Sep 17 00:00:00 2001
From: Claudio Hoffmann <hoffmanncl72341@th-nuernberg.de>
Date: Sat, 16 Jan 2021 03:18:50 +0100
Subject: [PATCH] Move the Game Over screen to the GameLoop

---
 Level.cpp | 21 ++++++++-------------
 Level.hpp |  5 +++--
 main.cpp  | 15 +++++++++++++--
 3 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/Level.cpp b/Level.cpp
index 6e379de..91893ea 100644
--- a/Level.cpp
+++ b/Level.cpp
@@ -2,7 +2,6 @@
 #include "player.hpp"
 #include "Enemyprojectile.hpp"
 #include "playerprojectile.hpp"
-#include "Scoreb.hpp"
 #include "PixelShaders.hpp"
 
 // <kruegerzo72182
@@ -144,10 +143,10 @@ void Level::enemyVector_PushBack(std::unique_ptr<Enemy> enemy_)
     this->enemyVector.push_back(std::move(enemy_));
 }
 
-void Level::doDoSteps(FloatSeconds const &frame_time)
+bool Level::doDoSteps(FloatSeconds const &frame_time)
 {
     if(!player.step(player.getTopLeft(), frame_time, *this)) {
-        GameOverFlag = true;
+        return false;
     }
 
     for(auto it = enemyVector.begin(); it != enemyVector.end();) {
@@ -188,6 +187,7 @@ void Level::doDoSteps(FloatSeconds const &frame_time)
             it++;
         }
     }
+    return true;
 }
 
 bool Level::collHelper(Position const& vecPos, PixelBuffer const& vecBuf, float buffPosX, float buffPosY, int buffWidth, int buffHeigth)
@@ -266,6 +266,11 @@ bool Level::HitObstacle(float posX, float posY, Color hitColor, int bufferWidth,
     return false;
 }
 
+int Level::getScore() const
+{
+    return score;
+}
+
 DynamicPixelBuffer const& Level::draw()
 {
     this->levelBuffer.clear(_t);
@@ -291,16 +296,6 @@ DynamicPixelBuffer const& Level::draw()
         if(i != nullptr){
         this->levelBuffer.blit_topleft({ static_cast<int>(i->getX()), static_cast<int>(i->getY()) }, i->getSprite());}
     }
-
-    if(GameOverFlag)
-    {
-        Score Highscore;
-        Highscore.SetScoreSprite(score);
-        this->levelBuffer.blit_topleft(Highscore.GameOverPos,Highscore.getGameOverSprite());
-        for(auto & i : Highscore.ScoreBoard){
-            this->levelBuffer.blit_topleft(i.ScorePos,i.getScoreSprite());
-        }
-    }
     /****/
     return this->levelBuffer;
 }
diff --git a/Level.hpp b/Level.hpp
index 7c0524b..f15a313 100644
--- a/Level.hpp
+++ b/Level.hpp
@@ -141,10 +141,11 @@ public:
     bool HitPlayer(float posX, float posY, int bufferWidth, int bufferHeigth);
     bool HitObstacle(float posX, float posY, Color hitColor, int bufferWidth, int bufferHeigth);
     void enemyVector_PushBack(std::unique_ptr<Enemy> enemy_);
-    void doDoSteps(FloatSeconds const &frame_time);
+    // Returns false on game-over.
+    bool doDoSteps(FloatSeconds const &frame_time);
+    int getScore() const;
     std::vector<std::unique_ptr<Projectile>>& getProjectileVector();
     DynamicPixelBuffer const& draw();
-    bool GameOverFlag = false; //hauerch71498
 private:
     int levelWidth;
     int levelHeigth;
diff --git a/main.cpp b/main.cpp
index dd52c95..ae981af 100644
--- a/main.cpp
+++ b/main.cpp
@@ -6,6 +6,7 @@
 #include "Level.hpp" // kruegerzo72182
 #include "Enemy.hpp" // hauerch71498
 #include "Bomber.hpp" // hauerch71498
+#include "Scoreb.hpp" // hauerch71498
 #include "Tank.hpp" // hauerch71498
 #include "Trooper.hpp" // hauerch71498
 #include "Enemyprojectile.hpp" // hauerch71498
@@ -34,6 +35,7 @@ void addBuilding(float x, float y, int size, Level &level_ptr)
 class GameLoop {
     int frame = 0;
     FloatSeconds time_elapsed{ 0.0f };
+    bool GameOverFlag = false; //hauerch71498
 
     DynamicPixelBuffer framebuffer = {screenWidth, screenHeigth};
 
@@ -105,18 +107,27 @@ public:
         }
         // kruegerzo72182>
 
-        if(!level.GameOverFlag) //Hauerch71498
+        if(!GameOverFlag) //Hauerch71498
         {
         // <kruegerzo72182
         // player movement
         player_.move(platform, frame_time, level);
 
         // enemy movement
-        level.doDoSteps(frame_time);
+        GameOverFlag = (level.doDoSteps(frame_time) == false);
         }
         // Output to the console, Gamelogic should happen before this
         framebuffer.blit_topleft({ 0, 0 }, level.draw());
         // kruegerzo72182>
+
+        if(GameOverFlag) {
+            Score Highscore;
+            Highscore.SetScoreSprite(level.getScore());
+            framebuffer.blit_topleft(Highscore.GameOverPos,Highscore.getGameOverSprite());
+            for(auto & i : Highscore.ScoreBoard){
+                framebuffer.blit_topleft(i.ScorePos,i.getScoreSprite());
+            }
+        }
         // <hoffmanncl72341
         platform.render(framebuffer);
 
-- 
GitLab