#include "Tirs_Gest.h"

Tirs_Gest::Tirs_Gest(SDL_Surface* blueTir, SDL_Surface* redTir)
:m_tirs(0), m_blueImg(blueTir), m_redImg(redTir)
{
    SDL_SetColorKey(m_blueImg, SDL_SRCCOLORKEY, SDL_MapRGBA(m_blueImg->format, 0, 0, 0, 255));
    SDL_SetColorKey(m_redImg, SDL_SRCCOLORKEY, SDL_MapRGBA(m_redImg->format, 0, 0, 0, 255));
}

Tirs_Gest::~Tirs_Gest()
{
    // Nettoyage
    while ( !m_tirs.empty() ) {
        delete m_tirs.front();
        m_tirs.pop_front();
    }
}

void Tirs_Gest::allDisplay(const Vec &lookAt, SDL_Surface* screen)
{
    // Nettoyage
    while ( !m_tirs.empty() && !m_tirs.front()->exist() ) {
        delete m_tirs.front();
        m_tirs.pop_front();
    }

    // Affichage
    for (unsigned int i(0); i < m_tirs.size(); i++)
        m_tirs[i]->afficher(lookAt, screen);
}

void Tirs_Gest::allMove() const
{
    for (unsigned int i(0); i < m_tirs.size(); i++)
        m_tirs[i]->move();
}

void Tirs_Gest::addTir(Vec pos, Vec visee, int degats, bool allie)
{
    SDL_Surface* tirImg(0x0);
    m_tirs.push_back(0x0);
    if ( allie ) tirImg = m_blueImg;
    else tirImg = m_redImg;
    m_tirs.back() = new Tir(tirImg, pos, visee, degats, allie);
}

int Tirs_Gest::encaisser(Vec pos, bool allie) const
{
    int somme(0);
    for (unsigned int i(0); i < m_tirs.size(); i++)
        somme += m_tirs[i]->encaisser(pos, allie);

    return somme;
}