#include "PluieFlamme.h"

PluieFlamme::PluieFlamme(DoubleAxe origine,int nbPop,int power,
                         float graviteY,int rayon,
                         Uint32 couleur, float resistance)
:m_graviteY(0,graviteY),m_rayon(rayon),m_couleur(couleur),m_resist(resistance)
{
    //Créations des particules
    Vecteur depart(origine.x,origine.y);
    Vecteur direction(1.0,0.0);
    for (int i(0); i<nbPop; i++)
    {
        //Positions
        m_position.push_back(depart);//Position de pop
        std::cout << "Rotate result ("<<direction.getX()<<";"<<direction.getY()<<")"<<std::endl;//Debug
        direction.rotateD(360.0/nbPop);
        m_force.push_back(direction*power);
    }
}///PluieFlamme

void PluieFlamme::deplacement()
{
    for (Uint32 i(0); i<m_position.size(); i++)
    {
        m_position[i]+=m_force[i];
        m_force[i]+=m_graviteY;
        m_force[i]*=m_resist;
    }
}///PluieFlamme

void PluieFlamme::dessiner(SDL_Surface* support)
{
    if (!m_position.empty())
        for (Uint32 i(0); i<m_position.size(); i++)
            blitFeuFollet(support, m_position[i].getX(), m_position[i].getY(), m_rayon, m_couleur, 128);
}///PluieFlamme

bool PluieFlamme::estFini(SDL_Surface* support)
{
    //Combien de billes sont en dehors ?
    Uint32 inventaire(0);
    for (Uint32 i(0); i<m_position.size(); i++)
    {
        if( (m_position[i].getX()>support->w || m_position[i].getX()<0
             || m_position[i].getY()>support->h || m_position[i].getY()<0)
           && !m_position.empty())
        inventaire++;
    }
    //Sont elles toutes en dehors ?
    if (inventaire==m_position.size())
        return true;
    else
        return false;

}///PluieFlamme