#include #include #include #include "structures.h" #include "constantes.h" #include "prototypes.h" #include #include #include void Fblitterennemis (SURFACES *surfaces, POSITIONS *positions,ENNEMIS ennemis[],int Vnbennemis) { int i; /* TODO understand if this is needed or not */ (void) ennemis; Finitialiserpositionsennemis (surfaces,positions,Vnbennemis); for (i = 0;i <= Vnbennemis;i++) SDL_BlitSurface (surfaces->Tennemi[i],NULL,surfaces->Pecran,&positions->Vpositionennemis[i]); SDL_Flip (surfaces->Pecran); } static void blit_chr_infos(SURFACES *surfaces, struct character_t *chr) { TTF_Font *police=NULL; SDL_Color fg={132,215,107,0},bg={100,0,0,0}; char string[256]; SDL_Surface *surf_hp; SDL_Surface *surf_mp; police=TTF_OpenFont("TIMESBI.TTF",18); sprintf(string, "PV %d/%d ", chr->hp, chr->max_hp); surf_hp = TTF_RenderText_Shaded(police, string, fg, bg); sprintf(string, "PM %d/%d ", chr->mp, chr->max_mp); surf_mp = TTF_RenderText_Shaded(police, string, fg, bg); chr->pos_hp.x = chr->pos.x + chr->def_surf->w / 2 - surf_hp->w / 2; chr->pos_mp.x = chr->pos.x + chr->def_surf->w / 2 - surf_mp->w / 2; chr->pos_hp.y = chr->pos.y + chr->def_surf->h - surf_hp->h - surf_mp->h; chr->pos_mp.y = chr->pos_hp.y + surf_mp->h; SDL_BlitSurface(surf_hp, NULL, surfaces->Pecran, &chr->pos_hp); SDL_BlitSurface(surf_mp, NULL, surfaces->Pecran, &chr->pos_mp); chr->pos_hp.w = surf_hp->w; chr->pos_hp.h = surf_hp->h; chr->pos_mp.w = surf_mp->w; chr->pos_mp.h = surf_mp->h; SDL_FreeSurface(surf_hp); SDL_FreeSurface(surf_mp); TTF_CloseFont(police); } void blit_team(SURFACES *surfaces, struct team_t *team) { for (int i = 0; i < team->chr_cnt; i++) { struct character_t *chr = &team->chrs[i]; SDL_BlitSurface(chr->surf, NULL, surfaces->Pecran, &chr->pos); if (!chr->alive) { SDL_Rect pos_dead; pos_dead.x = chr->pos.x + chr->surf->w / 2 - surfaces->Pmort->w / 2; pos_dead.y = chr->pos.y + chr->surf->h / 2 - surfaces->Pmort->h / 2; SDL_BlitSurface(surfaces->Pmort, NULL, surfaces->Pecran, &pos_dead); } blit_chr_infos(surfaces, chr); } } void Fchangercurseurennemis (SURFACES *surfaces, POSITIONS *positions,int selection,ENNEMIS ennemis[]) { SDL_Color couleur={120,0,0,0}; TTF_Font *police=NULL; char chaine[100]; if (surfaces->Pnomcible!=NULL) { SDL_FreeSurface (surfaces->Pnomcible); surfaces->Pnomcible=NULL; } police=TTF_OpenFont("times.ttf",20); SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis); SELECTION (0,ENNEMI) SELECTION (1,ENNEMI) SELECTION (2,ENNEMI) SELECTION (3,ENNEMI) SELECTION (4,ENNEMI) if (ennemis[selection].classe==GUERRIER_GOBELIN) sprintf(chaine,"GUERRIER GOBELIN"); surfaces->Pnomcible = TTF_RenderText_Blended (police,chaine,couleur); positions->Vpositionnomcible.x = positions->Vpositioncadrecible.x+surfaces->Pcadrecible->w/2-surfaces->Pnomcible->w/2; positions->Vpositionnomcible.y = positions->Vpositioncadrecible.y + 10; Fblitteractivedesactive (surfaces,positions,ennemis,selection); Fblitterpvcible (surfaces,positions,ennemis,selection); Fblitterpmcible (surfaces,positions,ennemis,selection); SDL_BlitSurface (surfaces->Pnomcible,NULL,surfaces->Pecran,&positions->Vpositionnomcible); SDL_Flip (surfaces->Pecran); TTF_CloseFont(police); } void Fchangercurseurpersos (SURFACES *surfaces, POSITIONS *positions,int selection) { SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies); SDL_Flip (surfaces->Pecran); SELECTION (0,ALLIE) SELECTION (1,ALLIE) SELECTION (2,ALLIE) SELECTION (3,ALLIE) SELECTION (4,ALLIE) SDL_Flip (surfaces->Pecran); } void Fchangeractionselectionnee(SURFACES *surfaces, POSITIONS *positions,int selection,int page,int nbactions,int type,OBJET *objets) { int i; TTF_Font *police=NULL; SDL_Color couleur={0,0,0,0}; char chaine[3][50]; police=TTF_OpenFont ("TIMESBI.TTF",20); SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositioncadreactions,surfaces->Pecran,&positions->Vpositioncadreactions); SDL_BlitSurface (surfaces->Pcadreactions,NULL,surfaces->Pecran,&positions->Vpositioncadreactions); for(i=0;iPactionselectionnee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[selection-page*3]); } for(i=0;i<3;i++) { if(surfaces->Pnomactions[i]!=NULL) { SDL_FreeSurface(surfaces->Pnomactions[i]); surfaces->Pnomactions[i]=NULL; } } if(type==ACTIONS) { if(page==0) { ECRIRE("ATTAQUE",0); ECRIRE("MAGIE BLANCHE",1); ECRIRE("MAGIE NOIRE",2); } else if(page==1) { ECRIRE("TECHNIQUES",0); ECRIRE("OBJETS",1); } } else if(type==MAGIE_BLANCHE) { if (page==0) { ECRIRE("SOIN",0); } } else if(type==MAGIE_NOIRE) { if(page==0) { ECRIRE("FEU",0); ECRIRE("GLACE",1); ECRIRE("EAU",2); } else if(page==1) { ECRIRE("TONNERRE",0); ECRIRE("CHOC",1); } } else if(type==OBJETS) { if(page==0) { ECRIRE("POTION",0); ECRIRE("ETHER",1); ECRIRE("POTION +",2); sprintf(chaine[0],"%d",objets->potions); surfaces->Pquantite[0]=TTF_RenderText_Blended(police,chaine[0],couleur); sprintf(chaine[1],"%d",objets->ethers); surfaces->Pquantite[1]=TTF_RenderText_Blended(police,chaine[1],couleur); sprintf(chaine[2],"%d",objets->potionsplus); surfaces->Pquantite[2]=TTF_RenderText_Blended(police,chaine[2],couleur); SDL_BlitSurface(surfaces->Pquantite[0],NULL,surfaces->Pecran,&positions->Vpositionquantite[0]); SDL_BlitSurface(surfaces->Pquantite[1],NULL,surfaces->Pecran,&positions->Vpositionquantite[1]); SDL_BlitSurface(surfaces->Pquantite[2],NULL,surfaces->Pecran,&positions->Vpositionquantite[2]); } else if(page==1) { ECRIRE("ETHER +",0); sprintf(chaine[0],"%d",objets->ethersplus); surfaces->Pquantite[0]=TTF_RenderText_Blended(police,chaine[0],couleur); SDL_BlitSurface(surfaces->Pquantite[0],NULL,surfaces->Pecran,&positions->Vpositionquantite[0]); } } if (page==nbactions/3) { if(3*(page+1)-nbactions==1) SDL_BlitSurface (surfaces->Pactiondesactivee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[2]); if(3*(page+1)-nbactions==2) { SDL_BlitSurface (surfaces->Pactiondesactivee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[2]); SDL_BlitSurface (surfaces->Pactiondesactivee,NULL,surfaces->Pecran,&positions->Vpositionactionselectionnee[1]); } } SDL_Flip(surfaces->Pecran); TTF_CloseFont (police); } void Fafficherdegats (SURFACES *surfaces, POSITIONS *positions, int degats,int clan, int cible, struct team_t *ally) { char chaine[10]; TTF_Font *police = NULL; SDL_Color fg = {210,0,0,0}; if(surfaces->Pnbdegats != NULL) { SDL_FreeSurface (surfaces->Pnbdegats); surfaces->Pnbdegats=NULL; } sprintf (chaine,"%d ", degats); police = TTF_OpenFont ("TIMES.TTF", 30 ); TTF_SetFontStyle(police,TTF_STYLE_BOLD); surfaces->Pnbdegats = TTF_RenderText_Blended(police,chaine,fg); if(clan==ENNEMI) { positions->Vpositiondegats.x=positions->Vpositionennemis[cible].x-30-surfaces->Pnbdegats->w; positions->Vpositiondegats.y=positions->Vpositionennemis[cible].y+surfaces->Tennemi[cible]->h/2-surfaces->Pnbdegats->h/2; } else { positions->Vpositiondegats.x=positions->Vpositionpersos[cible].x+surfaces->Tperso[cible]->w+30; positions->Vpositiondegats.y=positions->Vpositionpersos[cible].y+surfaces->Tperso[cible]->h/2-surfaces->Pnbdegats->h/2; SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositionpvpersos[cible],surfaces->Pecran,&positions->Vpositionpvpersos[cible]); blit_team(surfaces, ally); } positions->Vpositiondegats.w=surfaces->Pnbdegats->w; positions->Vpositiondegats.h=surfaces->Pnbdegats->h; SDL_BlitSurface (surfaces->Pnbdegats,NULL,surfaces->Pecran,&positions->Vpositiondegats); SDL_Flip (surfaces->Pecran); TTF_CloseFont (police); } void Faffichersoins (SURFACES *surfaces, POSITIONS *positions, int degats,int clan, int cible, struct team_t *ally) { char chaine[10]; (void) ally; TTF_Font *police = NULL; SDL_Color fg = {80,255,80,0}; if (surfaces->Pnbdegats != NULL) { SDL_FreeSurface (surfaces->Pnbdegats); surfaces->Pnbdegats=NULL; } sprintf (chaine,"%d", degats); police = TTF_OpenFont ("TIMES.TTF", 30); TTF_SetFontStyle(police,TTF_STYLE_BOLD); surfaces->Pnbdegats = TTF_RenderText_Blended (police,chaine,fg); if(clan==ENNEMI) { positions->Vpositiondegats.x=positions->Vpositionennemis[cible].x-30-surfaces->Pnbdegats->w; positions->Vpositiondegats.y=positions->Vpositionennemis[cible].y+surfaces->Tennemi[cible]->h/2-surfaces->Pnbdegats->h/2; } else { positions->Vpositiondegats.x=positions->Vpositionpersos[cible].x+surfaces->Tperso[cible]->w+30; positions->Vpositiondegats.y=positions->Vpositionpersos[cible].y+surfaces->Tperso[cible]->h/2-surfaces->Pnbdegats->h/2; } positions->Vpositiondegats.w=surfaces->Pnbdegats->w; positions->Vpositiondegats.h=surfaces->Pnbdegats->h; SDL_BlitSurface (surfaces->Pnbdegats,NULL,surfaces->Pecran,&positions->Vpositiondegats); SDL_Flip (surfaces->Pecran); TTF_CloseFont (police); } void Fblitteractivedesactive (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection) { int i; for (i=0;i<4;i++) { if(ennemis[selection].sensibilite[i] == ACTIVE) SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i]); else SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i]); } for (i=0;i<4;i++) { if(ennemis[selection].resistance[i] == ACTIVE) SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+4]); else SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+4]); } for(i=0;i<4;i++) { if (ennemis[selection].invulnerabilite[i] == ACTIVE) SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+8]); else SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+8]); } for (i=0;i<4;i++) { if (ennemis[selection].absorbtion[i] == ACTIVE) SDL_BlitSurface (surfaces->Pactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+12]); else SDL_BlitSurface (surfaces->Pdesactive,NULL,surfaces->Pecran,&positions->Vpositionactivedesactive[i+12]); } } void Fblitterpvcible (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection) { TTF_Font *police = NULL; SDL_Color couleur = {132,215,107,0}; char chaine[50]; if (surfaces->Ppvcible != NULL) { SDL_FreeSurface (surfaces->Ppvcible); surfaces->Ppvcible=NULL; } if (ennemis[selection].pv<0) ennemis[selection].pv=0; sprintf (chaine,"%d/%d",ennemis[selection].pv,ennemis[selection].pvinitiaux); police=TTF_OpenFont ("TIMESBI.TTF",18); surfaces->Ppvcible=TTF_RenderText_Blended (police,chaine,couleur); SDL_BlitSurface (surfaces->Ppvcible,NULL,surfaces->Pecran,&positions->Vpositionpvcible); TTF_CloseFont (police); } void Fblitterpmcible (SURFACES *surfaces,POSITIONS *positions,ENNEMIS ennemis[],int selection) { TTF_Font *police = NULL; SDL_Color couleur = {132,215,107,0}; char chaine[50]; if (surfaces->Ppmcible != NULL) { SDL_FreeSurface (surfaces->Ppmcible); surfaces->Ppvcible=NULL; } sprintf (chaine,"%d/%d",ennemis[selection].pm,ennemis[selection].pminitiaux); police=TTF_OpenFont ("TIMESBI.TTF",18); surfaces->Ppmcible=TTF_RenderText_Blended (police,chaine,couleur); SDL_BlitSurface (surfaces->Ppmcible,NULL,surfaces->Pecran,&positions->Vpositionpmcible); TTF_CloseFont (police); } void Fblitterfond(SURFACES* surfaces) { SDL_Rect position; position.x=0; position.y=0; surfaces->Pfondjeu=IMG_Load("images/jeu/textures/background.jpg"); SDL_BlitSurface(surfaces->Pfondjeu,NULL,surfaces->Pecran,&position); SDL_Flip(surfaces->Pecran); }