jtmm/src/menu.c

96 lines
2.6 KiB
C

#include <gint/display.h>
#include <gint/keyboard.h>
#include "menu.h"
#include "shared_define.h"
#define Y_POS 88
char menu(int *level_id, char *enable_up_key, char *game_loop,
unsigned int rem_step)
{
char reload = 0;
char selected = 0;
char menu_loop = 1;
char exit_buffer = 1;
while (menu_loop)
{
clearevents();
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { if (!exit_buffer) menu_loop = 0; }
else exit_buffer = 0;
//return to game
selected += keydown(KEY_DOWN) - keydown(KEY_UP);
if (selected == 4) selected = 0;
else if (selected == -1) selected = 3;
dclear(0);
dprint(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%u.%02u", rem_step/60, rem_step%60);
dtext_opt(32, Y_POS, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "CONTINUE");
dtext_opt(32, Y_POS + 12, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "SELECT LEVEL");
dtext_opt(32, Y_POS + 24, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "UP KEY TO JUMP:");
dtext_opt(32, Y_POS + 36, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "EXIT GAME");
dtext_opt(16, Y_POS + (selected * 12), C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, ">");
//action switch
if (keydown_any(KEY_SHIFT, KEY_EXE, 0))
{
switch (selected)
{
case 0:
menu_loop = 0;
break;
case 1:
reload = menu_level_selection(level_id);
menu_loop = 0;
break;
case 2:
*enable_up_key = !*enable_up_key;
break;
case 3:
menu_loop = 0;
*game_loop = 0;
break;
}
}
//up key state display
if (*enable_up_key) dtext_opt(152, Y_POS + 24, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "ON");
else dtext_opt(152, Y_POS + 24, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "OFF");
dupdate();
while (keydown_any(KEY_UP, KEY_DOWN, KEY_SHIFT, KEY_EXE, 0)) clearevents();
}
return reload;
}
char menu_level_selection(int *level_id)
{
char confirm_buffer = 1;
char menu_loop = 1;
int initial_lid = *level_id;
while (menu_loop) {
dclear(0);
clearevents();
*level_id += keydown(KEY_RIGHT) - keydown(KEY_LEFT);
if (*level_id > LAST_LEVEL || keydown(KEY_0)) *level_id = 5050;
else if (*level_id < 5050) *level_id = LAST_LEVEL;
dprint_opt(32, Y_POS + 20, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "> %02d <", *level_id - 5049);
if (keydown_any(KEY_SHIFT, KEY_EXE, 0))
{
if (!confirm_buffer)
{
menu_loop = 0;
}
}
else confirm_buffer = 0;
if (keydown_any(KEY_EXIT, KEY_MENU, 0))
{
*level_id = initial_lid;
menu_loop = 0;
}
dupdate();
while (keydown_any(KEY_RIGHT, KEY_LEFT, KEY_SHIFT, KEY_EXE,
KEY_EXIT, KEY_MENU, 0))
{
clearevents();
}
}
dclear(0);
return initial_lid != *level_id;
}