123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #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
|