96 lines
2.6 KiB
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;
|
|
}
|