100 lines
1.6 KiB
C
100 lines
1.6 KiB
C
void
|
|
menu_play(void)
|
|
{
|
|
state_t* state = &g_game->state;
|
|
|
|
state->mode_last = state->mode;
|
|
state->mode = MODE_PLAY;
|
|
}
|
|
|
|
void
|
|
menu_quit(void)
|
|
{
|
|
state_t* state = &g_game->state;
|
|
|
|
state->mode_last = state->mode;
|
|
state->mode = MODE_QUIT;
|
|
}
|
|
|
|
void
|
|
menu_options(void)
|
|
{
|
|
state_t* state = &g_game->state;
|
|
|
|
state->mode_last = state->mode;
|
|
state->mode = MODE_OPTIONS;
|
|
}
|
|
|
|
void
|
|
menu_main(void)
|
|
{
|
|
state_t* state = &g_game->state;
|
|
|
|
state->mode_last = state->mode;
|
|
state->mode = MODE_MAIN_MENU;
|
|
}
|
|
|
|
void
|
|
menu_exit(void)
|
|
{
|
|
state_t* state = &g_game->state;
|
|
|
|
state->mode = state->mode_last;
|
|
}
|
|
|
|
void
|
|
menu_update(input_t input, ui_menu_t* menu)
|
|
{
|
|
state_t* state = &g_game->state;
|
|
|
|
if (input.down
|
|
&& input.down != state->input_prev.down)
|
|
{
|
|
if (menu->active_index == menu->widget_count-1) {
|
|
menu->active_index = 0;
|
|
} else {
|
|
menu->active_index++;
|
|
}
|
|
}
|
|
else if (input.up &&
|
|
input.up != state->input_prev.up)
|
|
{
|
|
if (menu->active_index == 0) {
|
|
menu->active_index = menu->widget_count - 1;
|
|
} else {
|
|
menu->active_index--;
|
|
}
|
|
}
|
|
else if (input.select &&
|
|
input.select != state->input_prev.select)
|
|
{
|
|
menu->widgets[menu->active_index].action();
|
|
}
|
|
}
|
|
|
|
void
|
|
menu_render(ui_menu_t* menu)
|
|
{
|
|
render_screen_begin();
|
|
|
|
for (size_t i = 0; i < menu->widget_count; i++)
|
|
{
|
|
ui_widget_t* widget = &menu->widgets[i];
|
|
|
|
char *format;
|
|
if (menu->active_index == i) {
|
|
format = "> %s";
|
|
} else {
|
|
format = " %s";
|
|
}
|
|
|
|
render_text(
|
|
format_text(format, widget->label),
|
|
(vec2){widget->x, WINDOW_HEIGHT-widget->y},
|
|
(vec3){1.0f, 1.0f, 0.0f}, 4.0f);
|
|
}
|
|
|
|
render_screen_end();
|
|
}
|
|
|