From 18230757a9639c8da5c97dc2726d531314103b82 Mon Sep 17 00:00:00 2001
From: Claudio Hoffmann <hoffmanncl72341@th-nuernberg.de>
Date: Sat, 16 Jan 2021 01:57:00 +0100
Subject: [PATCH] Entity: Move current sprite retrieval down to the base class

---
 Bomber.cpp           |  2 +-
 Bomber.hpp           |  2 +-
 Enemy.cpp            | 18 +++++++++---------
 Enemy.hpp            |  1 -
 Enemyprojectile.cpp  |  4 ++--
 Enemyprojectile.hpp  |  2 +-
 Entity.hpp           |  6 ++++++
 Level.cpp            | 34 +++++++++++++++++-----------------
 Level.hpp            |  4 ++--
 Projectile.hpp       |  2 +-
 Tank.cpp             | 10 +++++-----
 Tank.hpp             |  2 +-
 Trooper.cpp          |  4 ++--
 Trooper.hpp          |  2 +-
 player.cpp           |  7 ++++---
 player.hpp           |  2 +-
 playerprojectile.cpp |  4 ++--
 playerprojectile.hpp |  2 +-
 18 files changed, 57 insertions(+), 51 deletions(-)

diff --git a/Bomber.cpp b/Bomber.cpp
index 3c05372..4c3e5e9 100644
--- a/Bomber.cpp
+++ b/Bomber.cpp
@@ -116,7 +116,7 @@ static StaticPixelBuffer<23,11> constexpr left[2] = {
      }}}
     };
 
-const PixelBuffer& Bomber::getCurrentSprite()
+const PixelBuffer& Bomber::getSprite()
 {
     switch ( direcion ) {
 
diff --git a/Bomber.hpp b/Bomber.hpp
index d370deb..2e4fa6f 100644
--- a/Bomber.hpp
+++ b/Bomber.hpp
@@ -12,7 +12,7 @@ public:
     void doStep(float PlayerX, float PlayerY, FloatSeconds const & Frametime, Level &level) override;
     int getScore() override;
 protected:
-    const PixelBuffer& getCurrentSprite() override; //Enemy braucht nur einer Darstellung
+    PixelBuffer const& getSprite() override;
     void move(FloatSeconds const & Frametime, Level &level) override;
 };
 
diff --git a/Enemy.cpp b/Enemy.cpp
index c128a80..c452904 100644
--- a/Enemy.cpp
+++ b/Enemy.cpp
@@ -11,7 +11,7 @@ Enemy::Enemy(int health,float x, float y, int direction, int animationstep)
 
 void Enemy::shoot(Level &level)
 {
-    const auto &sprite = this->getCurrentSprite();
+    const auto &sprite = this->getSprite();
     if(timetillreload<0)
     {
         switch ( this->direcion ) {
@@ -46,9 +46,9 @@ bool Enemy::lookup(float PlayerY, Level &level)
 {
     if(this->topleft.Y > PlayerY)
     {
-        int i = static_cast<int>(this->topleft.Y-(this->getCurrentSprite().h()/2));
+        int i = static_cast<int>(this->topleft.Y-(this->getSprite().h()/2));
         i = i-static_cast<int>(PlayerY);
-        if(level.checkCollision(this->topleft.X, this->topleft.Y+(this->getCurrentSprite().h()/2)+i, i, 1))
+        if(level.checkCollision(this->topleft.X, this->topleft.Y+(this->getSprite().h()/2)+i, i, 1))
         {
             return false;
         }
@@ -66,9 +66,9 @@ bool Enemy::lookdown(float PlayerY, Level &level)
 {
     if(this->topleft.Y < PlayerY)
     {
-        int i = static_cast<int>(this->topleft.Y+(this->getCurrentSprite().h()/2));
+        int i = static_cast<int>(this->topleft.Y+(this->getSprite().h()/2));
         i = static_cast<int>(PlayerY)-i;
-        if(level.checkCollision(this->topleft.X, this->topleft.Y+(this->getCurrentSprite().h()/2), i, 1))
+        if(level.checkCollision(this->topleft.X, this->topleft.Y+(this->getSprite().h()/2), i, 1))
         {
             return false;
         }
@@ -86,9 +86,9 @@ bool Enemy::lookleft(float PlayerX, Level &level)
 {
     if(this->topleft.X > PlayerX)
     {
-        int i = static_cast<int>(this->topleft.X-(this->getCurrentSprite().w()/2));
+        int i = static_cast<int>(this->topleft.X-(this->getSprite().w()/2));
         i = i-static_cast<int>(PlayerX);
-        if(level.checkCollision(this->topleft.X-(this->getCurrentSprite().w()/2)-i, this->topleft.Y, i, 1))
+        if(level.checkCollision(this->topleft.X-(this->getSprite().w()/2)-i, this->topleft.Y, i, 1))
         {
             return false;
         }
@@ -106,9 +106,9 @@ bool Enemy::lookright(float PlayerX, Level &level)
 {
     if(this->topleft.X < PlayerX)
     {
-        int i = static_cast<int>(this->topleft.X+(this->getCurrentSprite().w()/2));
+        int i = static_cast<int>(this->topleft.X+(this->getSprite().w()/2));
         i = static_cast<int>(PlayerX)-i;
-        if(level.checkCollision(this->topleft.X-(this->getCurrentSprite().w()/2), this->topleft.Y, i, 1))
+        if(level.checkCollision(this->topleft.X-(this->getSprite().w()/2), this->topleft.Y, i, 1))
         {
             return false;
         }
diff --git a/Enemy.hpp b/Enemy.hpp
index 3a67144..cc21381 100644
--- a/Enemy.hpp
+++ b/Enemy.hpp
@@ -16,7 +16,6 @@ class Enemy : public Entity
 {
 public:
     Enemy(int Health, float x, float y, int direction, int animationstep);
-    virtual const PixelBuffer& getCurrentSprite() = 0;
     virtual int getScore() = 0;
 protected:
 
diff --git a/Enemyprojectile.cpp b/Enemyprojectile.cpp
index 7b62bee..8fc99db 100644
--- a/Enemyprojectile.cpp
+++ b/Enemyprojectile.cpp
@@ -12,14 +12,14 @@ static StaticPixelBuffer<3,3> constexpr Psprite= {
         {"222"},
         {" 2 "}
     }}};
-const PixelBuffer& EnemyProjectile::getCurrentSprite()
+const PixelBuffer& EnemyProjectile::getSprite()
 {
     return Psprite;
 };
 bool EnemyProjectile::move(FloatSeconds const & Frametime, Level &level)
 {
     int speed = 15;
-    const auto &sprite = this->getCurrentSprite();
+    const auto &sprite = this->getSprite();
     switch (this->direction)
     {
         case 1: //down
diff --git a/Enemyprojectile.hpp b/Enemyprojectile.hpp
index 8e950cc..da75429 100644
--- a/Enemyprojectile.hpp
+++ b/Enemyprojectile.hpp
@@ -6,7 +6,7 @@ class EnemyProjectile: public Projectile
 public:
     EnemyProjectile(float x, float y, int direction);
     bool doStep(FloatSeconds const & Frametime, Level &level) override;
-    const PixelBuffer& getCurrentSprite() override;
+    PixelBuffer const& getSprite() override;
 protected:
     bool move(FloatSeconds const & Frametime, Level &level) override;
 
diff --git a/Entity.hpp b/Entity.hpp
index f782414..324ce9d 100644
--- a/Entity.hpp
+++ b/Entity.hpp
@@ -52,6 +52,12 @@ public:
 	// Removes a single hit point. Returns the new number of hit points.
 	int takeDamage();
 	/// -------------
+
+	/// Rendering
+	/// ---------
+
+	virtual PixelBuffer const& getSprite() = 0;
+	/// ---------
 };
 
 #endif /* ENTITY_HPP */
diff --git a/Level.cpp b/Level.cpp
index fa15d5c..3197d8d 100644
--- a/Level.cpp
+++ b/Level.cpp
@@ -27,7 +27,7 @@ Wall::Wall(int length, int thickness, Position const &pos, Orientation orientati
     this->wallBuffer.clear(this->wallColor);
 }
 
-DynamicPixelBuffer const& Wall::getWallBuffer()
+PixelBuffer const& Wall::getSprite()
 {
     return this->wallBuffer;
 }
@@ -49,10 +49,10 @@ SceneryType Scenery::getSceneryType()
     return this->sType;
 }
 
-PixelBuffer const &Scenery::getSceneryBuffer(SceneryType type)
+PixelBuffer const &Scenery::getSprite()
 {
     // switch case returns depending on SceneryType here
-    switch(type) {
+    switch(sType) {
     case SceneryType::Dead_Tree: return this->DEAD_TREE; break;
     case SceneryType::Rock: return this->ROCK; break;
     case SceneryType::Rubble: return this->RUBBLE; break;
@@ -205,13 +205,13 @@ bool Level::collHelper(Position const& vecPos, PixelBuffer const& vecBuf, float
 bool Level::checkCollision(float posX, float posY, int bufferWidth, int bufferHeigth)
 {
     for(auto i = this->wallVector.begin(); i != this->wallVector.end(); i++ ){
-        if(collHelper(i->getTopLeft(), i->getWallBuffer(), posX, posY, bufferWidth, bufferHeigth)) return true;
+        if(collHelper(i->getTopLeft(), i->getSprite(), posX, posY, bufferWidth, bufferHeigth)) return true;
     }
     for(auto i = this->borders.begin(); i != this->borders.end(); i++ ){
-        if(collHelper(i->getTopLeft(), i->getWallBuffer(), posX, posY, bufferWidth, bufferHeigth)) return true;
+        if(collHelper(i->getTopLeft(), i->getSprite(), posX, posY, bufferWidth, bufferHeigth)) return true;
     }
     for(auto i = this->sceneryVector.begin(); i != this->sceneryVector.end(); i++ ){
-        if(collHelper(i->getTopLeft(), i->getSceneryBuffer(i->getSceneryType()), posX, posY, bufferWidth, bufferHeigth)) return true;
+        if(collHelper(i->getTopLeft(), i->getSprite(), posX, posY, bufferWidth, bufferHeigth)) return true;
     }
     return false;
 }
@@ -219,7 +219,7 @@ bool Level::checkCollision(float posX, float posY, int bufferWidth, int bufferHe
 /*Hauerch71498 Hitdetection*/
 bool Level::HitEnemy(float posX, float posY, int bufferWidth, int bufferHeigth)
 {
-    if(collHelper(player.getTopLeft(),player.getBuffer(),posX,posY,bufferWidth,bufferHeigth))
+    if(collHelper(player.getTopLeft(),player.getSprite(),posX,posY,bufferWidth,bufferHeigth))
     {
         player.takeDamage();
         return true;
@@ -230,7 +230,7 @@ bool Level::HitEnemy(float posX, float posY, int bufferWidth, int bufferHeigth)
 bool Level::HitPlayer(float posX, float posY, int bufferWidth, int bufferHeigth)
 {
     for(auto &i : this->enemyVector){
-        if(i != nullptr && collHelper(i->getTopLeft(), i->getCurrentSprite(), posX, posY, bufferWidth, bufferHeigth))
+        if(i != nullptr && collHelper(i->getTopLeft(), i->getSprite(), posX, posY, bufferWidth, bufferHeigth))
         {
             //HauerCh71498
             //{
@@ -250,14 +250,14 @@ bool Level::HitPlayer(float posX, float posY, int bufferWidth, int bufferHeigth)
 bool Level::HitObstacle(float posX, float posY, int bufferWidth, int bufferHeigth)
 {
     for(auto &i : wallVector){
-        if(collHelper(i.getTopLeft(), i.getWallBuffer(), posX, posY, bufferWidth, bufferHeigth))
+        if(collHelper(i.getTopLeft(), i.getSprite(), posX, posY, bufferWidth, bufferHeigth))
         {
             i.takeDamage();
             return true;
         }
     }
     for(auto &i : sceneryVector) {
-        if(collHelper(i.getTopLeft(), i.getSceneryBuffer(i.getSceneryType()), posX, posY, bufferWidth, bufferHeigth))
+        if(collHelper(i.getTopLeft(), i.getSprite(), posX, posY, bufferWidth, bufferHeigth))
         {
             i.takeDamage();
             return true;
@@ -271,23 +271,23 @@ DynamicPixelBuffer const& Level::draw()
     this->levelBuffer.clear(_t);
 
     for(auto i : this->wallVector){
-        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getWallBuffer());
+        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getSprite());
     }
     for(auto i : this->borders){
-        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getWallBuffer());
+        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getSprite());
     }
     for(auto i : this->sceneryVector){
-        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getSceneryBuffer(i.getSceneryType()));
+        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getSprite());
     }
-    this->levelBuffer.blit_topleft(this->player.getTopLeft(), this->player.getBuffer());
+    this->levelBuffer.blit_topleft(this->player.getTopLeft(), this->player.getSprite());
     for(auto & i : this->enemyVector){
         if(i != nullptr) {
             auto hitTime = i->getHitTime();
             if(hitTime > 0.0f) {
-                HitShader hs = { i->getCurrentSprite(), hitTime, HIT_TIME };
+                HitShader hs = { i->getSprite(), hitTime, HIT_TIME };
                 this->levelBuffer.blit_topleft(i->getTopLeft(), hs);
             } else {
-                this->levelBuffer.blit_topleft(i->getTopLeft(), i->getCurrentSprite());
+                this->levelBuffer.blit_topleft(i->getTopLeft(), i->getSprite());
             }
         }
     }
@@ -295,7 +295,7 @@ DynamicPixelBuffer const& Level::draw()
     /**Hauerch71498**/
     for(auto & i : this->projectileVector){
         if(i != nullptr){
-        this->levelBuffer.blit_topleft({ static_cast<int>(i->getX()), static_cast<int>(i->getY()) }, i->getCurrentSprite());}
+        this->levelBuffer.blit_topleft({ static_cast<int>(i->getX()), static_cast<int>(i->getY()) }, i->getSprite());}
     }
 
     if(GameOverFlag)
diff --git a/Level.hpp b/Level.hpp
index 58f7f01..cf47afa 100644
--- a/Level.hpp
+++ b/Level.hpp
@@ -29,7 +29,7 @@ class Wall : public Entity
 public:
     Wall(int length, int thickness, Position const &pos, Orientation orientation);
     DynamicPixelBuffer constructWallBuffer(Orientation orientation, int length, int thickness);
-    DynamicPixelBuffer const& getWallBuffer();
+    PixelBuffer const& getSprite() override;
     void setWallColor(Color color);
 
 private:
@@ -46,7 +46,7 @@ class Scenery : public Entity
 {
 public:
     Scenery(Position const &pos, SceneryType type);
-    PixelBuffer const &getSceneryBuffer(SceneryType type);
+    PixelBuffer const& getSprite() override;
     SceneryType getSceneryType();
 
 private:
diff --git a/Projectile.hpp b/Projectile.hpp
index 038cd93..efc685d 100644
--- a/Projectile.hpp
+++ b/Projectile.hpp
@@ -11,7 +11,7 @@ public:
     virtual ~Projectile();
     float getX();
     float getY();
-    virtual const PixelBuffer& getCurrentSprite() = 0;
+    virtual const PixelBuffer& getSprite() = 0;
     virtual bool doStep(FloatSeconds const & Frametime, Level &level) = 0;
 protected:
     int direction;
diff --git a/Tank.cpp b/Tank.cpp
index 50b8201..3adaee8 100644
--- a/Tank.cpp
+++ b/Tank.cpp
@@ -124,7 +124,7 @@ static StaticPixelBuffer<17,11> constexpr left[2] = {
          {" 101010101010101 "}
      }}}
     };
-const PixelBuffer& Tank::getCurrentSprite()
+const PixelBuffer& Tank::getSprite()
 {
     switch ( direcion ) {
 
@@ -157,22 +157,22 @@ bool Tank::checkmove(FloatSeconds const & Frametime, Level &level)
     switch (this->direcion)
     {
         case 1: //down
-            if(!level.checkCollision(this->topleft.X, this->topleft.Y - 3*Frametime.count(), this->getCurrentSprite().w(), this->getCurrentSprite().h()))
+            if(!level.checkCollision(this->topleft.X, this->topleft.Y - 3*Frametime.count(), this->getSprite().w(), this->getSprite().h()))
                 {this->topleft.Y -= 3*Frametime.count(); return false;}
             else return true;
             break;
         case 2:
-        if(!level.checkCollision(this->topleft.X - 3*Frametime.count(), this->topleft.Y, this->getCurrentSprite().w(), this->getCurrentSprite().h()))
+        if(!level.checkCollision(this->topleft.X - 3*Frametime.count(), this->topleft.Y, this->getSprite().w(), this->getSprite().h()))
              {this->topleft.X -= 3*Frametime.count(); return false;}
         else return true;
             break;
         case 3:
-            if(!level.checkCollision(this->topleft.X + 3*Frametime.count(),this->topleft.Y, this->getCurrentSprite().w(), this->getCurrentSprite().h()))
+            if(!level.checkCollision(this->topleft.X + 3*Frametime.count(),this->topleft.Y, this->getSprite().w(), this->getSprite().h()))
                  {this->topleft.X += 3*Frametime.count(); return false;}
             else return true;
             break;
         default:
-            if(!level.checkCollision(this->topleft.X, this->topleft.Y + 3*Frametime.count(), this->getCurrentSprite().w(), this->getCurrentSprite().h()))
+            if(!level.checkCollision(this->topleft.X, this->topleft.Y + 3*Frametime.count(), this->getSprite().w(), this->getSprite().h()))
                 {this->topleft.Y += 3*Frametime.count(); return false;}
             else return true;
             break;
diff --git a/Tank.hpp b/Tank.hpp
index ea6af0e..32e2267 100644
--- a/Tank.hpp
+++ b/Tank.hpp
@@ -12,7 +12,7 @@ public:
     void doStep(float PlayerX, float PlayerY, FloatSeconds const & Frametime, Level &level) override;
     int getScore() override;
 protected:
-    const PixelBuffer& getCurrentSprite() override; //Enemy braucht nur einer Darstellung
+    PixelBuffer const& getSprite() override;
     //void shoot() override;
     void move(FloatSeconds const & Frametime, Level &level) override;
     void turnToPlayer(float PlayerX, float PlayerY);
diff --git a/Trooper.cpp b/Trooper.cpp
index 5db3592..a9e95b6 100644
--- a/Trooper.cpp
+++ b/Trooper.cpp
@@ -107,7 +107,7 @@ static StaticPixelBuffer<5,9> constexpr right[2] = {
                                                {"1 11 "}
                                           }}}
                                           };
-const PixelBuffer& Trooper::getCurrentSprite()
+const PixelBuffer& Trooper::getSprite()
 {
     switch ( direcion ) {
 
@@ -139,7 +139,7 @@ void Trooper::changeDirection()
 
 bool Trooper::checkmove(FloatSeconds const & Frametime, Level &level)
 {
-    const auto &sprite = this->getCurrentSprite();
+    const auto &sprite = this->getSprite();
     switch (this->direcion)
     {
         case 1: //down
diff --git a/Trooper.hpp b/Trooper.hpp
index 50cf5d9..32b7048 100644
--- a/Trooper.hpp
+++ b/Trooper.hpp
@@ -18,7 +18,7 @@ public:
     int getScore() override;
 
 protected:
-    const PixelBuffer& getCurrentSprite() override; //Enemy braucht nur einer Darstellung
+    PixelBuffer const& getSprite() override;
     void move(FloatSeconds const & Frametime, Level &level) override;
     void turnToPlayer(float PlayerX, float PlayerY);
     //Temporarly
diff --git a/player.cpp b/player.cpp
index 39e53b2..80d3259 100644
--- a/player.cpp
+++ b/player.cpp
@@ -125,7 +125,7 @@ static StaticPixelBuffer<PLAYER_W, PLAYER_H> constexpr left[2] = {
      }}}
     };
 
-const PixelBuffer & Player:: getBuffer()
+PixelBuffer const& Player::getSprite()
 {
     switch ( direction ) {
 
@@ -179,7 +179,8 @@ void Player::move(Platform &p, FloatSeconds const & Frametime, Level &level)
             }
             }
         }
-        if(!level.checkCollision(topleft.X + deltaX, topleft.Y + deltaY, getBuffer().w(), getBuffer().h())) {
+        auto const &sprite = this->getSprite();
+        if(!level.checkCollision(topleft.X + deltaX, topleft.Y + deltaY, sprite.w(), sprite.h())) {
             topleft.X+=deltaX;
             topleft.Y+=deltaY;
 
@@ -201,7 +202,7 @@ void Player::shoot(Level &level)
 {
     if(timetillreload<0)
     {
-        const auto &sprite=this->getBuffer();
+        auto const &sprite = this->getSprite();
         switch ( this->direction ) {
         case 1: //front
         {
diff --git a/player.hpp b/player.hpp
index d72120c..3e4a81f 100644
--- a/player.hpp
+++ b/player.hpp
@@ -19,7 +19,7 @@ protected:
     float animationtimer=0.0f;
 public:
     Player(float x, float y);
-    const PixelBuffer &getBuffer();
+    PixelBuffer const& getSprite() override;
     void move(Platform &p, FloatSeconds const & Frametime, Level &level);
     void shoot(Level &level);
 };
diff --git a/playerprojectile.cpp b/playerprojectile.cpp
index c243828..6c56438 100644
--- a/playerprojectile.cpp
+++ b/playerprojectile.cpp
@@ -12,14 +12,14 @@ static StaticPixelBuffer<3,3> constexpr Psprite= {
         {"666"},
         {" 6 "}
     }}};
-const PixelBuffer& PlayerProjectile::getCurrentSprite()
+const PixelBuffer& PlayerProjectile::getSprite()
 {
     return Psprite;
 };
 bool PlayerProjectile::move(FloatSeconds const & Frametime, Level &level)
 {
     int speed = 15;
-    const auto &sprite = this->getCurrentSprite();
+    const auto &sprite = this->getSprite();
     switch (this->direction)
     {
         case 1: //down
diff --git a/playerprojectile.hpp b/playerprojectile.hpp
index 9b59750..425aaae 100644
--- a/playerprojectile.hpp
+++ b/playerprojectile.hpp
@@ -6,7 +6,7 @@ class PlayerProjectile: public Projectile
 public:
     PlayerProjectile(float x, float y, int direction);
     bool doStep(FloatSeconds const & Frametime, Level &level) override;
-    const PixelBuffer& getCurrentSprite() override;
+    PixelBuffer const& getSprite() override;
 protected:
     bool move(FloatSeconds const & Frametime, Level &level) override;
 
-- 
GitLab