clean up of menu keydown handling (pause now shares code with menu)

This commit is contained in:
Sebastian Krzyszkowiak 2012-03-07 23:23:39 +01:00
parent b0a4369678
commit 1f43af56f0
2 changed files with 109 additions and 81 deletions

View file

@ -67,6 +67,9 @@ void DrawMenuState(struct Game *game) {
al_draw_text_with_shadow(font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.8, ALLEGRO_ALIGN_CENTRE, "Exit");
break;
default:
game->menu.selected=0;
font = game->menu.font; if (game->menu.selected==0) font = game->menu.font_selected;
al_draw_text_with_shadow(font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.5, ALLEGRO_ALIGN_CENTRE, "Critical Error");
break;
}
}
@ -252,32 +255,43 @@ void Menu_Load(struct Game *game) {
}
int Menu_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
if (ev->keyboard.keycode==ALLEGRO_KEY_UP) {
game->menu.selected--;
al_play_sample_instance(game->menu.click);
} else if (ev->keyboard.keycode==ALLEGRO_KEY_DOWN) {
game->menu.selected++;
al_play_sample_instance(game->menu.click);
} else if ((game->menu.menustate==MENUSTATE_MAIN) && (((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.selected==3)) || (ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE))) {
al_play_sample_instance(game->menu.click);
return 1;
} else if ((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.menustate==MENUSTATE_MAIN) && (game->menu.selected==0)) {
}
if (ev->keyboard.keycode==ALLEGRO_KEY_ENTER) {
al_play_sample_instance(game->menu.click);
switch (game->menu.menustate) {
case MENUSTATE_MAIN:
switch (game->menu.selected) {
case 0:
UnloadGameState(game);
game->gamestate = GAMESTATE_LOADING;
game->loadstate = GAMESTATE_INTRO;
} else if ((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.menustate==MENUSTATE_MAIN) && (game->menu.selected==2)) {
al_play_sample_instance(game->menu.click);
break;
case 1:
game->menu.menustate=MENUSTATE_OPTIONS;
game->menu.selected=0;
PrintConsole(game, "menu state changed %d", game->menu.menustate);
break;
case 2:
UnloadGameState(game);
game->gamestate = GAMESTATE_LOADING;
game->loadstate = GAMESTATE_ABOUT;
} else if (((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.menustate==MENUSTATE_MAIN) && (game->menu.selected==1)) || (((game->menu.menustate==MENUSTATE_OPTIONS) && ((ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE))) || (((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.selected==3))))) {
al_play_sample_instance(game->menu.click);
if (game->menu.menustate==MENUSTATE_MAIN) game->menu.menustate=MENUSTATE_OPTIONS;
else game->menu.menustate=MENUSTATE_MAIN;
game->menu.selected=0;
PrintConsole(game, "menu state changed %d", game->menu.menustate);
} else if ((game->menu.menustate==MENUSTATE_OPTIONS) && (game->menu.selected==2)) {
break;
case 3:
return 1;
break;
}
break;
case MENUSTATE_OPTIONS:
switch (game->menu.selected) {
case 2:
if ((game->music) && (game->fx)) { game->music=0; SetConfigOption("SuperDerpy", "music", "0");
al_detach_mixer(game->audio.music);
}
@ -292,8 +306,64 @@ int Menu_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
al_attach_mixer_to_mixer(game->audio.fx, game->audio.mixer);
al_attach_mixer_to_mixer(game->audio.music, game->audio.mixer);
}
al_play_sample_instance(game->menu.click);
break;
case 3:
game->menu.menustate=MENUSTATE_MAIN;
game->menu.selected=0;
PrintConsole(game, "menu state changed %d", game->menu.menustate);
break;
default:
break;
}
break;
case MENUSTATE_PAUSE:
switch (game->menu.selected){
case 0:
PrintConsole(game,"Game resumed.");
al_destroy_bitmap(game->pause.bitmap);
game->pause.bitmap = NULL;
game->gamestate = game->loadstate;
break;
case 1:
game->gamestate=game->loadstate;
UnloadGameState(game);
game->gamestate = GAMESTATE_LOADING;
game->loadstate = GAMESTATE_MAP;
break;
case 2:
game->menu.menustate=MENUSTATE_OPTIONS;
game->menu.selected=0;
PrintConsole(game, "menu state changed %d", game->menu.menustate);
break;
case 3:
return 1;
default:
break;
}
break;
default:
return 1;
break;
}
} else if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) {
switch (game->menu.menustate) {
case MENUSTATE_OPTIONS:
game->menu.menustate=MENUSTATE_MAIN;
game->menu.selected=0;
PrintConsole(game, "menu state changed %d", game->menu.menustate);
break;
case MENUSTATE_PAUSE:
PrintConsole(game,"Game resumed.");
al_destroy_bitmap(game->pause.bitmap);
game->pause.bitmap = NULL;
game->gamestate = game->loadstate;
break;
default:
return 1;
break;
}
}
if (game->menu.selected==-1) game->menu.selected=3;
if (game->menu.selected==4) game->menu.selected=0;
return 0;

View file

@ -24,53 +24,11 @@
#include "menu.h"
int Pause_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
if ((ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE) || ((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.menustate==MENUSTATE_PAUSE) && (game->menu.selected==0))) {
al_play_sample_instance(game->menu.click);
PrintConsole(game,"Game resumed.");
al_destroy_bitmap(game->pause.bitmap);
game->pause.bitmap = NULL;
game->gamestate = game->loadstate;
}
else if ((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.menustate==MENUSTATE_PAUSE) && (game->menu.selected==1)) {
al_play_sample_instance(game->menu.click);
game->gamestate=game->loadstate;
UnloadGameState(game);
game->gamestate = GAMESTATE_LOADING;
game->loadstate = GAMESTATE_MAP;
} else if (ev->keyboard.keycode==ALLEGRO_KEY_UP) {
game->menu.selected--;
al_play_sample_instance(game->menu.click);
} else if (ev->keyboard.keycode==ALLEGRO_KEY_DOWN) {
game->menu.selected++;
al_play_sample_instance(game->menu.click);
} else if ((game->menu.menustate==MENUSTATE_PAUSE) && (((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.selected==3)) || (ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE))) {
al_play_sample_instance(game->menu.click);
return 1;
} else if (((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.menustate==MENUSTATE_PAUSE) && (game->menu.selected==2)) || (((game->menu.menustate==MENUSTATE_OPTIONS) && ((ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE))) || (((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.selected==3))))) {
al_play_sample_instance(game->menu.click);
if (game->menu.menustate==MENUSTATE_PAUSE) game->menu.menustate=MENUSTATE_OPTIONS;
else game->menu.menustate=MENUSTATE_PAUSE;
if ((game->menu.menustate==MENUSTATE_OPTIONS) && ((ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) || ((ev->keyboard.keycode==ALLEGRO_KEY_ENTER) && (game->menu.selected==3)))) {
game->menu.menustate=MENUSTATE_PAUSE;
game->menu.selected=0;
PrintConsole(game, "options state changed %d", game->menu.menustate);
} else if ((game->menu.menustate==MENUSTATE_OPTIONS) && (game->menu.selected==2)) {
if ((game->music) && (game->fx)) { game->music=0; SetConfigOption("SuperDerpy", "music", "0");
al_detach_mixer(game->audio.music);
}
else if (game->fx) { game->music=1; game->fx=0; SetConfigOption("SuperDerpy", "music", "1"); SetConfigOption("SuperDerpy", "fx", "0");
al_attach_mixer_to_mixer(game->audio.music, game->audio.mixer);
al_detach_mixer(game->audio.fx);
}
else if (game->music) { game->music=0; SetConfigOption("SuperDerpy", "music", "0");
al_detach_mixer(game->audio.music);
}
else { game->music=1; game->fx=1; SetConfigOption("SuperDerpy", "music", "1"); SetConfigOption("SuperDerpy", "fx", "1");
al_attach_mixer_to_mixer(game->audio.fx, game->audio.mixer);
al_attach_mixer_to_mixer(game->audio.music, game->audio.mixer);
}
al_play_sample_instance(game->menu.click);
}
if (game->menu.selected==-1) game->menu.selected=3;
if (game->menu.selected==4) game->menu.selected=0;
PrintConsole(game, "menu state changed %d", game->menu.menustate);
} else return Menu_Keydown(game, ev);
return 0;
}