Skip to content
Snippets Groups Projects
Commit cb84ff69 authored by Frederik Alexander Keens's avatar Frederik Alexander Keens
Browse files

Merge branch 'implement-effect-on-death' into 'main'

Implement Explosion on unit death

See merge request !59
parents de5f358c 7c2a8b5e
No related branches found
No related tags found
1 merge request!59Implement Explosion on unit death
......@@ -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);
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment