#include "Raquette.h"

Raquette::Raquette(int identifiant, int nbJoueursTotal, Uint32 couleur):
    m_identifiant(identifiant),m_centre(COTE/2,COTE/2),
    m_angleOrigine(0,COTE/2-COTE/36),m_angleEcartMax(180/nbJoueursTotal-(asin((float)RAYON_RQT/RAYON_TERRAIN)*180/M_PI))
{
    m_angleOrigine.rotate(360.0/nbJoueursTotal*identifiant);
    m_angleActuel = m_angleOrigine;

    m_pixel = SDL_CreateRGBSurface(SDL_HWSURFACE, 1, 1, 32, 0, 0, 0, 0);
    SDL_FillRect(m_pixel,0,couleur);
    m_position = m_centre+m_angleActuel;

}///Constructeur

Raquette::~Raquette()
{
    SDL_FreeSurface(m_pixel);
}///Destructeur

void Raquette::afficher(SDL_Surface* screen)
{
    // [1] Balayage des positions
    SDL_Rect pos;
    float distanceCentre;
    for(int y(-RAYON_RQT);y<RAYON_RQT;y++)
        for(int x(-RAYON_RQT);x<RAYON_RQT;x++)
        {
            // [2] Position du point en balayage
            pos.x = m_position.getX()+x;
            pos.y = m_position.getY()+y;
            distanceCentre = (Vecteur(pos.x, pos.y)-m_centre).norme();
            // [3] Arrondi
            if(distanceCentre < RAYON_FENETRE && distanceCentre > RAYON_TERRAIN &&
               x*x+y*y < (RAYON_RQT)*(RAYON_RQT))
                SDL_BlitSurface(m_pixel, 0, screen, &pos);
        }
}///afficher

void Raquette::deplacer(bool droite)
{
    // [1] Teste si la raquette a le droit de bouger
    bool ecart = m_angleActuel.scalair(m_angleOrigine)<=m_angleEcartMax;
    // [2] On bouge
    //[2.1] Vers la droite
    if(droite && ecart)
    {
        //[2.1.1]Mouvement
        m_angleActuel.rotate(VITESSE);
        //[2.1.2]Pas trop loin !
        if (m_angleActuel.scalair(m_angleOrigine)>m_angleEcartMax)
        {
            Vecteur tmp(m_angleOrigine);
            tmp.rotate(m_angleEcartMax-0.05);
            m_angleActuel = tmp;
        }

    }
    //[2.2] Ou vers la gauche
    else if (ecart)
    {
        m_angleActuel.rotate(-VITESSE);
        if (m_angleActuel.scalair(m_angleOrigine)>m_angleEcartMax)
        {
            Vecteur tmp(m_angleOrigine);
            tmp.rotate(-m_angleEcartMax+0.05);
            m_angleActuel = tmp;
        }
    }
    else
    {
        Vecteur tmp(m_angleOrigine);
        tmp.rotate(-m_angleEcartMax);
        m_angleActuel = tmp;
    }
    // [END]
    m_position = m_centre+m_angleActuel;
}///deplacer

Vecteur Raquette::getAngleActuel()
{
    return m_angleActuel;
}///getAngleActuel