diff --git a/src/game/combat/CombatEngine.cpp b/src/game/combat/CombatEngine.cpp index 579b2609004d5878c24358c95b64059c7c156011..37510fd0ef32032769becb271f5c3f60157174bf 100644 --- a/src/game/combat/CombatEngine.cpp +++ b/src/game/combat/CombatEngine.cpp @@ -9,7 +9,6 @@ * @authors Lorenz Diel */ - namespace advanced_wars { @@ -200,6 +199,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 @@ -208,6 +210,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 1407e94788fdbb1b96687d4be0d6ce5aeb93a889..0727342adda6d72c7ec794f1e044c5e082d597cd 100644 --- a/src/game/effect/Effect.cpp +++ b/src/game/effect/Effect.cpp @@ -25,18 +25,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; @@ -47,8 +47,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; }