add strip for hub switch to map
authorhgn <hgodden00@gmail.com>
Tue, 16 Apr 2024 01:45:01 +0000 (02:45 +0100)
committerhgn <hgodden00@gmail.com>
Tue, 16 Apr 2024 01:45:01 +0000 (02:45 +0100)
input.h
menu.c
menu.h

diff --git a/input.h b/input.h
index 2d4f30ea2c300b4a0b67eea1c9d03ea764de1bc7..dc89f8b1d025ca37f8c8f85b6cf96b55382dd3f5 100644 (file)
--- 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 9df54fbc45fbdf991813f9b294927e4907e4bdca..fe4d909b2c2f49b0712c1bb35f62f9538f5b3fde 100644 (file)
--- 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 8e658dcabc73847ac767e57c0c1857251fa7e544..46c4ec403ccbdd9ffdf57b4057d6c88619fa276d 100644 (file)
--- 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