Select Git revision
Effect.cpp 1.40 KiB
/**
* Effect.cpp
*
* @author Frederik Keens
*/
#include "Effect.hpp"
#include "../core/Spritesheet.hpp"
#include <vector>
namespace advanced_wars
{
Effect::Effect(int x, int y, EffectId id, bool repeat)
: m_x(x), m_y(y), m_id(id), m_repeat(repeat), m_start(0) {
};
void Effect::render(Engine& engine, int scale)
{
Spritesheet* spritesheet = engine.getSpritesheet();
if (m_start == 0)
{
m_start = engine.getStage();
}
int step =
engine.getStage() % spritesheet->getEffectTextures().at(static_cast<int>(m_id)).second;
SDL_Rect src;
src.x = step * spritesheet->getEffectWidth() + step * spritesheet->getEffectHeight();
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.w = spritesheet->getEffectWidth() * scale;
dest.h = spritesheet->getEffectHeight() * scale;
SDL_RenderCopyEx(
engine.renderer(), spritesheet->getEffectTextures().at(static_cast<int>(m_id)).first, &src,
&dest, 0, NULL, SDL_FLIP_NONE);
}
bool Effect::isFinished(Engine& engine)
{
return engine.getStage() - m_start >
engine.getSpritesheet()->getEffectTextures().at(static_cast<int>(m_id)).second &&
!m_repeat;
}
} // namespace advanced_wars