From f4dee994b5f9019d805328d1019b4456f6bb4b2d Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Wed, 7 Jan 2015 13:06:57 +0100 Subject: game: added vim key bindings to UP/DOWN/LEFT/RIGHT h/j/k/l are mapped to behave like arrow keys so that the navigation is easier in the menus. F and A are respectiverly used to validate and cancel as well. Signed-off-by: Olivier Gayot --- actions.c | 18 ++++++ constantes.h | 180 ++++++++++++++++++++++++++++-------------------------- jouer.c | 4 ++ magies.c | 4 ++ map.c | 2 + menuchoixpersos.c | 3 + menuprincipal.c | 3 + 7 files changed, 126 insertions(+), 88 deletions(-) diff --git a/actions.c b/actions.c index 86533cc..5c31a08 100644 --- a/actions.c +++ b/actions.c @@ -30,6 +30,7 @@ void Fattaquer(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int switch (event.key.keysym.sym) { case SDLK_ESCAPE: + case SDLK_a: delay=0; continuer = 0; if(clan==ENNEMI) @@ -43,6 +44,7 @@ void Fattaquer(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int break; SELECTION_CIBLE() case SDLK_RETURN: + case SDLK_f: continuer=0; max=Fcalculerdegats(persos,Vtourallie,&min,ennemis,selection,clan,TYPE_ATTAQUE); degats=(rand()%(max-min+1))+min; @@ -161,9 +163,11 @@ void Fselectionnermagienoire(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES case SDL_KEYDOWN: switch (event.key.keysym.sym) { + case SDLK_a: case SDLK_ESCAPE: continuer=0; break; + case SDLK_k: case SDLK_UP: if(selection!=0) selection--; @@ -172,6 +176,7 @@ void Fselectionnermagienoire(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES page=selection/3; Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_NOIRE,NULL); break; + case SDLK_j: case SDLK_DOWN: if (selection!=nbactions-1) selection++; @@ -180,6 +185,7 @@ void Fselectionnermagienoire(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES page=selection/3; Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_NOIRE,NULL); break; + case SDLK_f: case SDLK_RETURN: SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats); SDL_Flip(surfaces->Pecran); @@ -208,9 +214,11 @@ void Fselectionnermagieblanche(SURFACES *surfaces,POSITIONS *positions,PERSONNAG switch (event.key.keysym.sym) { case SDLK_ESCAPE: + case SDLK_a: continuer=0; break; case SDLK_UP: + case SDLK_k: if (selection!=0) selection--; else @@ -219,6 +227,7 @@ void Fselectionnermagieblanche(SURFACES *surfaces,POSITIONS *positions,PERSONNAG Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_BLANCHE,NULL); break; case SDLK_DOWN: + case SDLK_j: if(selection!=nbactions-1) selection++; else @@ -226,6 +235,7 @@ void Fselectionnermagieblanche(SURFACES *surfaces,POSITIONS *positions,PERSONNAG page=selection/3; Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,MAGIE_BLANCHE,NULL); break; + case SDLK_f: case SDLK_RETURN: SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats); SDL_Flip(surfaces->Pecran); @@ -255,9 +265,11 @@ void Fselectionnerobjet(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES pers switch (event.key.keysym.sym) { case SDLK_ESCAPE: + case SDLK_a: continuer=0; break; case SDLK_UP: + case SDLK_k: if(selection!=0) selection--; else @@ -266,6 +278,7 @@ void Fselectionnerobjet(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES pers Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,OBJETS,objets); break; case SDLK_DOWN: + case SDLK_j: if (selection!=nbactions-1) selection++; else @@ -274,6 +287,7 @@ void Fselectionnerobjet(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES pers Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,OBJETS,objets); break; case SDLK_RETURN: + case SDLK_f: SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositiondegats,surfaces->Pecran,&positions->Vpositiondegats); SDL_Flip(surfaces->Pecran); if(page==0) @@ -324,6 +338,7 @@ int Fpotion(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vt switch(event.key.keysym.sym) { case SDLK_ESCAPE: + case SDLK_a: delay=0; continuer = 0; if(clan==ENNEMI) @@ -337,6 +352,7 @@ int Fpotion(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vt break; SELECTION_CIBLE() case SDLK_RETURN: + case SDLK_f: if(type==POTION) soins=1000; else if(type==POTIONPLUS) @@ -442,6 +458,7 @@ int Fether(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vto switch(event.key.keysym.sym) { case SDLK_ESCAPE: + case SDLK_a: delay=0; continuer = 0; if(clan==ENNEMI) @@ -455,6 +472,7 @@ int Fether(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int *Vto break; SELECTION_CIBLE() case SDLK_RETURN: + case SDLK_f: if(type==ETHER) soins=10; else if(type==ETHERPLUS) diff --git a/constantes.h b/constantes.h index 415074b..1b46e77 100644 --- a/constantes.h +++ b/constantes.h @@ -49,7 +49,6 @@ #define TYPE_ATTAQUE 0 #define TYPE_MAGIE 1 - #define SELECTION(nb,nb2) if (selection == nb)\ {\ if(nb2==ALLIE)\ @@ -78,92 +77,97 @@ -#define SELECTION_CIBLE() case SDLK_RIGHT:\ - if(clan==ALLIE)\ - {\ - selection=0;\ - while(ennemis[selection].etat==MORT)\ - selection++;\ - inverse(&clan);\ - SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);\ - Fchangercurseurennemis (surfaces,positions,selection,ennemis);\ - }\ - break;\ - case SDLK_LEFT:\ - if(clan==ENNEMI)\ - {\ - SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);\ - selection=0;\ - while(persos[selection].etat==MORT)\ - selection++;\ - inverse(&clan);\ - SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);\ - Fchangercurseurpersos(surfaces,positions,selection,persos);\ - }\ - break;\ - case SDLK_UP:\ - if(clan==ENNEMI)\ - {\ - if (selection!=0)\ - selection--;\ - else\ - selection=Vnbennemis;\ - while(ennemis[selection].etat==MORT)\ - {\ - if(selection!=0)\ - selection--;\ - else\ - selection=Vnbennemis;\ - }\ - Fchangercurseurennemis (surfaces,positions,selection,ennemis);\ - }\ - else\ - {\ - if (selection!=0)\ - selection--;\ - else\ - selection=2;\ - while(persos[selection].etat==MORT)\ - {\ - if(selection!=0)\ - selection--;\ - else\ - selection=2;\ - }\ - Fchangercurseurpersos(surfaces,positions,selection,ennemis);\ - }\ - break;\ - case SDLK_DOWN:\ - if(clan==ENNEMI)\ - {\ - if(selection!=Vnbennemis)\ - selection++;\ - else\ - selection=0;\ - while(ennemis[selection].etat==MORT)\ - {\ - if(selection!=Vnbennemis)\ - selection++;\ - else\ - selection=0;\ - }\ - Fchangercurseurennemis(surfaces,positions,selection,ennemis);\ - }\ - else\ - {\ - if(selection!=2)\ - selection++;\ - else\ - selection=0;\ - while(persos[selection].etat==MORT)\ - {\ - if(selection!=2)\ - selection++;\ - else\ - selection=0;\ - }\ - Fchangercurseurpersos(surfaces,positions,selection,ennemis);\ - }\ - break; +#define SELECTION_CIBLE() \ + case SDLK_RIGHT:\ +case SDLK_l: \ +if(clan==ALLIE)\ +{\ + selection=0;\ + while(ennemis[selection].etat==MORT)\ + selection++;\ + inverse(&clan);\ + SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncurseurallies,surfaces->Pecran,&positions->Vpositioncurseurallies);\ + Fchangercurseurennemis (surfaces,positions,selection,ennemis);\ +}\ +break;\ +case SDLK_LEFT:\ +case SDLK_h: \ +if(clan==ENNEMI)\ +{\ + SDL_BlitSurface (surfaces->Pfondjeu,&positions->Vpositioncadrecible,surfaces->Pecran,&positions->Vpositioncadrecible);\ + selection=0;\ + while(persos[selection].etat==MORT)\ + selection++;\ + inverse(&clan);\ + SDL_BlitSurface(surfaces->Pfondjeu,&positions->Vpositioncurseurennemis,surfaces->Pecran,&positions->Vpositioncurseurennemis);\ + Fchangercurseurpersos(surfaces,positions,selection,persos);\ +}\ +break;\ +case SDLK_UP:\ +case SDLK_k: \ +if(clan==ENNEMI)\ +{\ + if (selection!=0)\ + selection--;\ + else\ + selection=Vnbennemis;\ + while(ennemis[selection].etat==MORT)\ + {\ + if(selection!=0)\ + selection--;\ + else\ + selection=Vnbennemis;\ + }\ + Fchangercurseurennemis (surfaces,positions,selection,ennemis);\ +}\ +else\ +{\ + if (selection!=0)\ + selection--;\ + else\ + selection=2;\ + while(persos[selection].etat==MORT)\ + {\ + if(selection!=0)\ + selection--;\ + else\ + selection=2;\ + }\ + Fchangercurseurpersos(surfaces,positions,selection,ennemis);\ +}\ +break;\ +case SDLK_DOWN:\ +case SDLK_j:\ +if(clan==ENNEMI)\ +{\ + if(selection!=Vnbennemis)\ + selection++;\ + else\ + selection=0;\ + while(ennemis[selection].etat==MORT)\ + {\ + if(selection!=Vnbennemis)\ + selection++;\ + else\ + selection=0;\ + }\ + Fchangercurseurennemis(surfaces,positions,selection,ennemis);\ +}\ +else\ +{\ + if(selection!=2)\ + selection++;\ + else\ + selection=0;\ + while(persos[selection].etat==MORT)\ + {\ + if(selection!=2)\ + selection++;\ + else\ + selection=0;\ + }\ + Fchangercurseurpersos(surfaces,positions,selection,ennemis);\ +}\ +break; #endif diff --git a/jouer.c b/jouer.c index 066fce8..0b7641a 100644 --- a/jouer.c +++ b/jouer.c @@ -57,12 +57,14 @@ int Fjouer (SURFACES *surfaces, POSITIONS *positions, PERSONNAGES persos[],ENNEM switch(event.key.keysym.unicode) { case SDLK_ESCAPE: + case SDLK_a: continuer=0; break; } switch (event.key.keysym.sym) { case SDLK_UP: + case SDLK_k: if (selection!=0) selection--; else @@ -71,6 +73,7 @@ int Fjouer (SURFACES *surfaces, POSITIONS *positions, PERSONNAGES persos[],ENNEM Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,ACTIONS,NULL); break; case SDLK_DOWN: + case SDLK_j: if (selection!=nbactions-1) selection++; else @@ -79,6 +82,7 @@ int Fjouer (SURFACES *surfaces, POSITIONS *positions, PERSONNAGES persos[],ENNEM Fchangeractionselectionnee(surfaces,positions,selection,page,nbactions,ACTIONS,NULL); break; case SDLK_RETURN: + case SDLK_f: if(selection==ATTAQUE) Fattaquer(surfaces,positions,persos,&Vtourallie,ennemis,Vnbennemis,&Vtour); else if(selection==MAGIE_BLANCHE) diff --git a/magies.c b/magies.c index 35d2b00..8d0460d 100644 --- a/magies.c +++ b/magies.c @@ -30,6 +30,7 @@ int Fmagieelement (SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[], switch (event.key.keysym.sym) { case SDLK_ESCAPE: + case SDLK_a: continuer = 0; if(clan==ENNEMI) { @@ -42,6 +43,7 @@ int Fmagieelement (SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[], break; SELECTION_CIBLE() case SDLK_RETURN: + case SDLK_f: continuer=0; max=Fcalculerdegats(persos,Vtourallie,&min,ennemis,selection,clan,TYPE_MAGIE); degats=(rand()%(max-min+1))+min; @@ -151,6 +153,7 @@ int Fmagiesoin(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int switch(event.key.keysym.sym) { case SDLK_ESCAPE: + case SDLK_a: continuer = 0; if(clan==ENNEMI) { @@ -163,6 +166,7 @@ int Fmagiesoin(SURFACES *surfaces,POSITIONS *positions,PERSONNAGES persos[],int break; SELECTION_CIBLE() case SDLK_RETURN: + case SDLK_f: max=Fcalculersoins(persos,Vtourallie,&min,ennemis,selection); soins=(rand()%(max-min+1))+min; if(soins<0) diff --git a/map.c b/map.c index 49ef237..ff0d61a 100644 --- a/map.c +++ b/map.c @@ -23,9 +23,11 @@ void Fmap (SURFACES*surfaces, POSITIONS* positions,PERSONNAGES persos[],ENNEMIS switch (event.key.keysym.sym) { case SDLK_RETURN: + case SDLK_f: continuer=Fjouer(surfaces,positions,persos,ennemis); break; case SDLK_ESCAPE: + case SDLK_a: continuer=0; break; } diff --git a/menuchoixpersos.c b/menuchoixpersos.c index f1df0a1..a41d548 100644 --- a/menuchoixpersos.c +++ b/menuchoixpersos.c @@ -55,6 +55,7 @@ void Fmenuchoixpersos (SURFACES *surfaces, POSITIONS *positions) switch (event.key.keysym.sym) { case SDLK_LEFT: + case SDLK_h: if(Vchoix>PALADIN) { Vchoix--; @@ -67,6 +68,7 @@ void Fmenuchoixpersos (SURFACES *surfaces, POSITIONS *positions) } break; case SDLK_RIGHT: + case SDLK_l: if (Vchoix 0) { Vmode--; @@ -46,6 +48,7 @@ void Fmenuprincipal (SURFACES *surfaces, POSITIONS *positions) } break; case SDLK_RETURN: + case SDLK_f: continuer = Fentrermode (Vmode,surfaces,positions); Vmode = 0; if (continuer) -- cgit v1.2.3