mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 11:06:44 +01:00
clean up of menu keydown handling (pause now shares code with menu)
This commit is contained in:
parent
b0a4369678
commit
1f43af56f0
2 changed files with 109 additions and 81 deletions
140
src/menu.c
140
src/menu.c
|
@ -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");
|
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;
|
break;
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,48 +255,115 @@ void Menu_Load(struct Game *game) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int Menu_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
int Menu_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
||||||
|
|
||||||
if (ev->keyboard.keycode==ALLEGRO_KEY_UP) {
|
if (ev->keyboard.keycode==ALLEGRO_KEY_UP) {
|
||||||
game->menu.selected--;
|
game->menu.selected--;
|
||||||
al_play_sample_instance(game->menu.click);
|
al_play_sample_instance(game->menu.click);
|
||||||
} else if (ev->keyboard.keycode==ALLEGRO_KEY_DOWN) {
|
} else if (ev->keyboard.keycode==ALLEGRO_KEY_DOWN) {
|
||||||
game->menu.selected++;
|
game->menu.selected++;
|
||||||
al_play_sample_instance(game->menu.click);
|
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)) {
|
|
||||||
al_play_sample_instance(game->menu.click);
|
|
||||||
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);
|
|
||||||
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)) {
|
|
||||||
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 (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;
|
||||||
|
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;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
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==-1) game->menu.selected=3;
|
||||||
if (game->menu.selected==4) game->menu.selected=0;
|
if (game->menu.selected==4) game->menu.selected=0;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
50
src/pause.c
50
src/pause.c
|
@ -24,53 +24,11 @@
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
|
|
||||||
int Pause_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
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))) {
|
if ((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);
|
game->menu.menustate=MENUSTATE_PAUSE;
|
||||||
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;
|
|
||||||
game->menu.selected=0;
|
game->menu.selected=0;
|
||||||
PrintConsole(game, "options state changed %d", game->menu.menustate);
|
PrintConsole(game, "menu state changed %d", game->menu.menustate);
|
||||||
} else if ((game->menu.menustate==MENUSTATE_OPTIONS) && (game->menu.selected==2)) {
|
} else return Menu_Keydown(game, ev);
|
||||||
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;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue