/**
 * 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