From cf6979eeadc4f6ad1fb7200e96649a59928c0a65 Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 16 Apr 2024 02:45:01 +0100 Subject: [PATCH] add strip for hub switch to map --- input.h | 3 ++ menu.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- menu.h | 7 ++++- 3 files changed, 98 insertions(+), 6 deletions(-) diff --git a/input.h b/input.h index 2d4f30e..dc89f8b 100644 --- a/input.h +++ b/input.h @@ -25,6 +25,7 @@ enum sr_bind k_srbind_mback, k_srbind_maccept, k_srbind_mopen, + k_srbind_mhub, k_srbind_replay_play, k_srbind_replay_freecam, k_srbind_replay_resume, @@ -92,6 +93,8 @@ static vg_input_op *input_button_list[] = { [k_srbind_mdown] = INPUT_BASIC( SDLK_DOWN, SDL_CONTROLLER_BUTTON_DPAD_DOWN ), [k_srbind_mback] = INPUT_BASIC( SDLK_ESCAPE, SDL_CONTROLLER_BUTTON_B ), [k_srbind_mopen] = INPUT_BASIC( SDLK_ESCAPE, SDL_CONTROLLER_BUTTON_START ), +[k_srbind_mhub] = (vg_input_op[]){ vg_joy_button, SDL_CONTROLLER_BUTTON_Y, + vg_end }, [k_srbind_maccept] = (vg_input_op[]){ vg_keyboard, SDLK_e, vg_gui_visible, 0, vg_keyboard, SDLK_RETURN, vg_keyboard, SDLK_RETURN2, diff --git a/menu.c b/menu.c index 9df54fb..fe4d909 100644 --- a/menu.c +++ b/menu.c @@ -41,7 +41,7 @@ bool menu_viewing_map(void) { return (skaterift.activity == k_skaterift_menu) && (menu.page == k_menu_page_main) && - (menu.main_index == 0); + (menu.main_index == k_menu_main_map); } void menu_gui(void) @@ -97,13 +97,17 @@ void menu_gui(void) if( skaterift.activity != k_skaterift_menu ) return; - /* top bar */ + + /* TOP BAR + * -------------------------------------------------------------------*/ + ui_font_face( &vgf_default_title ); ui_px height = vg_ui.font->ch + 16; ui_rect topbar = { 0, 0, vg.window_x, height }; const char *opts[] = { - "Map", "Online", "Settings", "Video" + [k_menu_main_main] = "Menu", + [k_menu_main_map] = "Map" }; /* TAB CONTROL */ @@ -201,8 +205,78 @@ void menu_gui(void) } } - if( menu.main_index == 0 ) + if( menu.main_index == k_menu_main_map ) { + ui_font_face( &vgf_default_large ); + ui_rect title = { vg.window_x/2 - 512/2, height+8, 512, 64 }; + + ui_px x = 8, + y = height+8; + + struct ui_vert *vs = + ui_fill( (ui_rect){ x,y, 0,height }, + world_static.active_instance? GUI_COL_DARK: GUI_COL_ACTIVE ); + + char buf[64]; + vg_str str; + vg_strnull( &str, buf, sizeof(buf) ); + vg_strcat( &str, "Hub World" ); + + if( world_static.active_instance && + (vg_input.display_input_method == k_input_method_controller) ) + { + vg_strcat( &str, " (" ); + vg_input_string( &str, input_button_list[k_srbind_mhub], 1 ); + vg_strcat( &str, ")" ); + } + + ui_px w = ui_text( (ui_rect){ x+8, y, 1000, height }, buf, 1, + k_ui_align_middle_left, 0 ); + w *= vg_ui.font->sx; + x += w + 16; + + vs[1].co[0] = x + 8; + vs[2].co[0] = x; + + x += 2; + + world_instance *world = &world_static.instances[1]; + if( world->status == k_world_status_loaded ) + { + const char *world_name = + mdl_pstr( &world->meta, world->info.pstr_name ); + + vg_strnull( &str, buf, sizeof(buf) ); + vg_strcat( &str, world_name ); + + if( !world_static.active_instance && + (vg_input.display_input_method == k_input_method_controller) ) + { + vg_strcat( &str, " (" ); + vg_input_string( &str, input_button_list[k_srbind_mhub], 1 ); + vg_strcat( &str, ")" ); + } + + vs = ui_fill( (ui_rect){ x,y, 1000,height }, + world_static.active_instance? GUI_COL_ACTIVE: GUI_COL_DARK ); + w = ui_text( (ui_rect){ x+16,y, 1000,height }, buf, + 1, k_ui_align_middle_left, 0 ); + + w = w*vg_ui.font->sx + 8*3; + x += w; + + if( button_down( k_srbind_mhub ) || + ui_button_base( (ui_rect){0,y,x,height} ) == k_ui_button_click ) + { + world_switch_instance( world_static.active_instance ^ 0x1 ); + skaterift.activity = k_skaterift_default; + world_map.view_ready = 0; + } + + vs[0].co[0] += 8; + vs[1].co[0] = x + 8; + vs[2].co[0] = x; + } } else { @@ -213,7 +287,17 @@ void menu_gui(void) } } - vg_ui.frosting = gui.factive*0.015f; + /* MAIN / MAIN + * -------------------------------------------------------------------*/ + + if( menu.main_index == k_menu_main_main ) + { + ui_rect list = { vg.window_x/2 - 512/2, height+64, + 512, vg.window_y-height-128 }; + ui_fill( list, GUI_COL_DARK ); + } + + vg_ui.frosting = 0.015f; ui_flush( k_ui_shader_colour, vg.window_x, vg.window_y ); vg_ui.frosting = 0.0f; diff --git a/menu.h b/menu.h index 8e658dc..46c4ec4 100644 --- a/menu.h +++ b/menu.h @@ -13,12 +13,17 @@ enum menu_page k_menu_page_main }; +enum menu_main_subpage +{ + k_menu_main_main = 0, + k_menu_main_map = 1 +}; + struct global_menu { int disable_open; i32 skip_starter; enum menu_page page; - i32 main_index; enum menu_input_mode -- 2.25.1