#include "Joueur.h" Arme::Arme(SDL_Surface* ecran,unsigned int IDarme,int xCalibreExpl,int yCalibreExpl, int recul) : m_ecran(ecran),m_xCalibreExpl(xCalibreExpl),m_yCalibreExpl(yCalibreExpl),m_IDarme(IDarme),m_recul(recul) {//Constructeur if (IDarme==0) { //Assignation necessaire au baroudeur m_viseur=SDL_LoadBMP("Images/ViseurBaroudeur.bmp"); m_arme=SDL_LoadBMP("Images/Baroudeur.bmp"); m_tir=SDL_LoadBMP("Images/TirBaroudeur.bmp"); m_impact=SDL_LoadBMP("Images/ImpactBaroudeur.bmp"); m_munitionsRestantes=10; } else if (IDarme==1) { //Assignation necessaire à l'Usiane m_viseur=SDL_LoadBMP("Images/ViseurUsiane.bmp"); m_arme=SDL_LoadBMP("Images/Usiane.bmp"); m_tir=SDL_LoadBMP("Images/TirUsiane.bmp"); m_impact=SDL_LoadBMP("Images/ImpactUsiane.bmp"); m_munitionsRestantes=25; } else { //Assignation néecessaire au triphaseur m_viseur=SDL_LoadBMP("Images/ViseurTriphaseur.bmp"); m_arme=SDL_LoadBMP("Images/Triphaseur.bmp"); m_tir=SDL_LoadBMP("Images/TirTriphaseur.bmp"); m_impact=SDL_LoadBMP("Images/ImpactTriphaseur.bmp"); m_munitionsRestantes=125; } } Arme::~Arme() { SDL_FreeSurface(m_viseur); SDL_FreeSurface(m_arme); SDL_FreeSurface(m_tir); SDL_FreeSurface(m_impact); } void Arme::afficher(bool tir, SDL_Rect* positionViseur)//Test du tir pris en charge par le joueur proprio { //Traitement transparence SDL_SetColorKey(m_viseur,SDL_SRCCOLORKEY,SDL_MapRGB(m_viseur->format,255,255,255));//On met le fond (blanc) en invisible ! SDL_SetColorKey(m_tir,SDL_SRCCOLORKEY,SDL_MapRGB(m_tir->format,255,255,255)); SDL_SetColorKey(m_impact,SDL_SRCCOLORKEY,SDL_MapRGB(m_impact->format,255,255,255)); SDL_SetColorKey(m_arme,SDL_SRCCOLORKEY,SDL_MapRGB(m_arme->format,255,255,255)); SDL_SetAlpha(m_viseur,SDL_SRCALPHA,128);//On met le viseur en translucide ! SDL_SetAlpha(m_impact,SDL_SRCALPHA,128); //Réglage de position SDL_Rect positionTir; SDL_Rect positionBrasDroit; positionBrasDroit.x=430+((positionViseur->x-positionViseur->x%10)/10);//420 positionBrasDroit.y=265+((positionViseur->y-positionViseur->y%20)/20);//260 if (tir && m_munitionsRestantes>0) { //Calculs SDL_Rect positionImpact; positionTir.x=positionBrasDroit.x+m_xCalibreExpl;//Affichage de l'impact positionTir.y=positionBrasDroit.y+m_yCalibreExpl; positionBrasDroit.x=positionBrasDroit.x+m_recul;//Recul positionBrasDroit.y=positionBrasDroit.y+m_recul; positionImpact.x=positionViseur->x+16;//Centre sur le viseur positionImpact.y=positionViseur->y+16; //Affichage de tir SDL_BlitSurface(m_impact,0,m_ecran,&positionImpact); SDL_BlitSurface(m_tir,0,m_ecran,&positionTir);//Collage tir } //Affichage défaut SDL_BlitSurface(m_arme,0,m_ecran,&positionBrasDroit); SDL_BlitSurface(m_viseur,0,m_ecran,positionViseur); } void Arme::tir() { //Retrait de muntion m_munitionsRestantes--; } unsigned int Arme::getTypeWeapon() { return m_IDarme; } /*void Arme::recharger { //Pleins de trucs interessants... }*/ //////////////////////////////////////////////////////////// ///////////////////////Changement de def//////////////////// //////////////////////////////////////////////////////////// Joueur::Joueur(SDL_Surface* ecran):m_ecran(ecran),m_armeCycle(0),m_tirInstant(false) { m_armeOne=new Arme(ecran,0,80,85,5); m_armeTwo=new Arme(ecran,1,50,60,2); m_armeThree=new Arme(ecran,2,70,60,0); m_interVie=SDL_LoadBMP("Images/InterVie.bmp"); m_positionInterVie.x=420; m_positionInterVie.y=403; for (int i(0);i<60;i++) { m_jaugeVie[i]=SDL_CreateRGBSurface(SDL_HWSURFACE,29,1,32,0,0,0,0); SDL_FillRect(m_jaugeVie[i],NULL,SDL_MapRGB(m_ecran->format,255,255-2*i,0)); } m_variableVie=60; } Joueur::~Joueur()//Destructeur { delete(m_armeOne); delete(m_armeTwo); delete(m_armeThree); SDL_FreeSurface(m_interVie); } void Joueur::afficher() { if (m_armeCycle<4)//Si un tir vient d'être effectué { m_tirInstant=true; } else { m_tirInstant=false; } m_armeCycle++; SDL_BlitSurface(m_interVie,0,m_ecran,&m_positionInterVie); SDL_Rect positionJaugeVie; positionJaugeVie.x=429;//420+9 positionJaugeVie.y=412;//403+9 for (int i(0); iafficher(m_tirInstant,&m_positionViseur); } void Joueur::setArme(std::string choixArme) { if (choixArme=="Baroudeur") { m_armeSelect=m_armeOne; } else if (choixArme=="Usiane") { m_armeSelect=m_armeTwo; } else if (choixArme=="Triphaseur") { m_armeSelect=m_armeThree; } } void Joueur::giveMousePosition(int x, int y) { m_positionViseur.x=x-32; m_positionViseur.y=y-32; } void Joueur::tir() { m_armeCycle=0; m_armeSelect->tir(); } void Joueur::recevoirDegats(int degats) { m_variableVie=m_variableVie-degats; if (m_variableVie<0) { m_variableVie=0; } } bool Joueur::estVivant() { if (m_variableVie>0) { return true; } else { return false; } } unsigned int Joueur::getTypeWeapon() { return m_armeSelect->getTypeWeapon(); }