diff --git a/src/game/combat/CombatEngine.cpp b/src/game/combat/CombatEngine.cpp index 555b765594d4596279bee764a68543877b66fbd9..bc992ea2c92f88e7aea46aa8006a2583bf3eb81b 100644 --- a/src/game/combat/CombatEngine.cpp +++ b/src/game/combat/CombatEngine.cpp @@ -12,6 +12,10 @@ #include <memory> #include <unordered_map> +/** + * @authors Lorenz Diel + */ + namespace advanced_wars { @@ -202,6 +206,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level) // attacking->attack(defending); if (attacking->getHealth() <= 0) { + level.addEffect(Effect( + attacking.get()->getXPosition(), attacking.get()->getYPosition(), + EffectId::LAND_EXPLOSION, false)); level.removeUnit(selectedUnit); } else @@ -210,6 +217,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level) } if (defending->getHealth() <= 0) { + level.addEffect(Effect( + defending.get()->getXPosition(), defending.get()->getYPosition(), + EffectId::LAND_EXPLOSION, false)); level.removeUnit(targetedUnit); } level.setSelectedUnit(-1); diff --git a/src/game/effect/Effect.cpp b/src/game/effect/Effect.cpp index 3c95704b0f6585f33b73bec2b166656bfb9ce077..ec6749218701c27633eb164b33b5f66b8f73c795 100644 --- a/src/game/effect/Effect.cpp +++ b/src/game/effect/Effect.cpp @@ -26,18 +26,18 @@ void Effect::render(Engine& engine, int scale) m_start = engine.getStage(); } - int step = - engine.getStage() % spritesheet->getEffectTextures().at(static_cast<int>(m_id)).second; + int step = (engine.getStage() - m_start) % + spritesheet->getEffectTextures().at(static_cast<int>(m_id)).second; SDL_Rect src; - src.x = step * spritesheet->getEffectWidth() + step * spritesheet->getEffectHeight(); + src.x = step * spritesheet->getEffectWidth(); src.y = 0; src.w = spritesheet->getEffectWidth(); src.h = spritesheet->getEffectHeight(); SDL_Rect dest; - dest.x = (m_x * spritesheet->getTileWidth() * scale) - 8; - dest.y = (m_y * spritesheet->getTileHeight() * scale) - 8; + dest.x = (m_x * spritesheet->getTileWidth() * scale) - 8 * scale; + dest.y = (m_y * spritesheet->getTileHeight() * scale) - 16 * scale; dest.w = spritesheet->getEffectWidth() * scale; dest.h = spritesheet->getEffectHeight() * scale; @@ -48,8 +48,13 @@ void Effect::render(Engine& engine, int scale) bool Effect::isFinished(Engine& engine) { - return engine.getStage() - m_start > - engine.getSpritesheet()->getEffectTextures().at(static_cast<int>(m_id)).second && + if (m_start == 0) + { + return false; + } + + return (engine.getStage() - m_start > + engine.getSpritesheet()->getEffectTextures().at(static_cast<int>(m_id)).second) && !m_repeat; }