add strip for hub switch to map
[carveJwlIkooP6JGAAIwe30JlM.git] / menu.c
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;