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