Skip to content
Snippets Groups Projects
Commit a22343b9 authored by Frederik's avatar Frederik
Browse files

Implement Explosion on unit death

parent dc09feea
No related branches found
No related tags found
1 merge request!59Implement Explosion on unit death
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
* @authors Lorenz Diel * @authors Lorenz Diel
*/ */
namespace advanced_wars namespace advanced_wars
{ {
...@@ -200,6 +199,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level) ...@@ -200,6 +199,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level)
// attacking->attack(defending); // attacking->attack(defending);
if (attacking->getHealth() <= 0) if (attacking->getHealth() <= 0)
{ {
level.addEffect(Effect(
attacking.get()->getXPosition(), attacking.get()->getYPosition(),
EffectId::LAND_EXPLOSION, false));
level.removeUnit(selectedUnit); level.removeUnit(selectedUnit);
} }
else else
...@@ -208,6 +210,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level) ...@@ -208,6 +210,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level)
} }
if (defending->getHealth() <= 0) if (defending->getHealth() <= 0)
{ {
level.addEffect(Effect(
defending.get()->getXPosition(), defending.get()->getYPosition(),
EffectId::LAND_EXPLOSION, false));
level.removeUnit(targetedUnit); level.removeUnit(targetedUnit);
} }
level.setSelectedUnit(-1); level.setSelectedUnit(-1);
......
...@@ -25,18 +25,18 @@ void Effect::render(Engine& engine, int scale) ...@@ -25,18 +25,18 @@ void Effect::render(Engine& engine, int scale)
m_start = engine.getStage(); m_start = engine.getStage();
} }
int step = int step = (engine.getStage() - m_start) %
engine.getStage() % spritesheet->getEffectTextures().at(static_cast<int>(m_id)).second; spritesheet->getEffectTextures().at(static_cast<int>(m_id)).second;
SDL_Rect src; SDL_Rect src;
src.x = step * spritesheet->getEffectWidth() + step * spritesheet->getEffectHeight(); src.x = step * spritesheet->getEffectWidth();
src.y = 0; src.y = 0;
src.w = spritesheet->getEffectWidth(); src.w = spritesheet->getEffectWidth();
src.h = spritesheet->getEffectHeight(); src.h = spritesheet->getEffectHeight();
SDL_Rect dest; SDL_Rect dest;
dest.x = (m_x * spritesheet->getTileWidth() * scale) - 8; dest.x = (m_x * spritesheet->getTileWidth() * scale) - 8 * scale;
dest.y = (m_y * spritesheet->getTileHeight() * scale) - 8; dest.y = (m_y * spritesheet->getTileHeight() * scale) - 16 * scale;
dest.w = spritesheet->getEffectWidth() * scale; dest.w = spritesheet->getEffectWidth() * scale;
dest.h = spritesheet->getEffectHeight() * scale; dest.h = spritesheet->getEffectHeight() * scale;
...@@ -47,8 +47,13 @@ void Effect::render(Engine& engine, int scale) ...@@ -47,8 +47,13 @@ void Effect::render(Engine& engine, int scale)
bool Effect::isFinished(Engine& engine) bool Effect::isFinished(Engine& engine)
{ {
return engine.getStage() - m_start > if (m_start == 0)
engine.getSpritesheet()->getEffectTextures().at(static_cast<int>(m_id)).second && {
return false;
}
return (engine.getStage() - m_start >
engine.getSpritesheet()->getEffectTextures().at(static_cast<int>(m_id)).second) &&
!m_repeat; !m_repeat;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment