1
0
Fork 0
2022-untitled-game/code/src/game/menu.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();
}