diff --git a/Entity.cpp b/Entity.cpp index 323f86bad24d3288fb5019c37910b25eb8893c14..3f4dd658c87a3d21bdee9fd08c4f10319ff5538e 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 324ce9d0e61bcce55bb027ad3493f43acce5b9b7..59496073cde66e6d21675339c61c83251cf688b0 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 3197d8d3797549e007f2d1877e37718c1513805d..f1f29f6fe4830f5077ad886f1553935d9872cd68 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>