From adc007e430f7cbfd57f6a4d75c6e81abee03b21b Mon Sep 17 00:00:00 2001
From: Claudio Hoffmann <hoffmanncl72341@th-nuernberg.de>
Date: Sat, 16 Jan 2021 02:10:27 +0100
Subject: [PATCH] Entity: Show the hit animation for every destructable entity

---
 Entity.cpp | 12 ++++++++++++
 Entity.hpp |  4 ++++
 Level.cpp  | 16 +++++-----------
 3 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/Entity.cpp b/Entity.cpp
index 323f86b..3f4dd65 100644
--- a/Entity.cpp
+++ b/Entity.cpp
@@ -1,4 +1,6 @@
 #include "Entity.hpp"
+#include "PixelBuffer.hpp"
+#include "PixelShaders.hpp"
 
 Entity::Entity()
 {
@@ -59,3 +61,13 @@ int Entity::takeDamage()
 	hittime = HIT_TIME;
 	return hitpoints;
 }
+
+void Entity::blit(DynamicPixelBuffer &buf)
+{
+	if(hittime > 0.0f) {
+		HitShader hs{ getSprite(), hittime, HIT_TIME };
+		buf.blit_topleft(topleft, hs);
+	} else if(hitpoints > 0) {
+		buf.blit_topleft(topleft, getSprite());
+	}
+}
diff --git a/Entity.hpp b/Entity.hpp
index 324ce9d..5949607 100644
--- a/Entity.hpp
+++ b/Entity.hpp
@@ -7,6 +7,7 @@
 #include "Position.hpp"
 
 class Level;
+class DynamicPixelBuffer;
 
 float constexpr HIT_TIME = 1.0f;
 
@@ -57,6 +58,9 @@ public:
 	/// ---------
 
 	virtual PixelBuffer const& getSprite() = 0;
+
+	// Renders the entity to [buf].
+	void blit(DynamicPixelBuffer &buf);
 	/// ---------
 };
 
diff --git a/Level.cpp b/Level.cpp
index 3197d8d..f1f29f6 100644
--- a/Level.cpp
+++ b/Level.cpp
@@ -271,24 +271,18 @@ DynamicPixelBuffer const& Level::draw()
     this->levelBuffer.clear(_t);
 
     for(auto i : this->wallVector){
-        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getSprite());
+        i.blit(this->levelBuffer);
     }
     for(auto i : this->borders){
-        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getSprite());
+        i.blit(this->levelBuffer);
     }
     for(auto i : this->sceneryVector){
-        this->levelBuffer.blit_topleft(i.getTopLeft(), i.getSprite());
+        i.blit(this->levelBuffer);
     }
-    this->levelBuffer.blit_topleft(this->player.getTopLeft(), this->player.getSprite());
+    this->player.blit(this->levelBuffer);
     for(auto & i : this->enemyVector){
         if(i != nullptr) {
-            auto hitTime = i->getHitTime();
-            if(hitTime > 0.0f) {
-                HitShader hs = { i->getSprite(), hitTime, HIT_TIME };
-                this->levelBuffer.blit_topleft(i->getTopLeft(), hs);
-            } else {
-                this->levelBuffer.blit_topleft(i->getTopLeft(), i->getSprite());
-            }
+            i->blit(this->levelBuffer);
         }
     }
     // kruegerzo72182>
-- 
GitLab