Add network connect thing to menu
authorhgn <hgodden00@gmail.com>
Mon, 24 Feb 2025 03:44:36 +0000 (03:44 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 24 Feb 2025 03:44:36 +0000 (03:44 +0000)
src/menu.c
src/network.c

index 692ffe33d805c9e9d4aea040bc1e1384ae97f0a8..ed82d77aeb6b8115bf376463e6bf384942c9507b 100644 (file)
@@ -102,8 +102,7 @@ static void menu_decor_select( ui_context *ctx, ui_rect rect )
    ui_text( ctx, a1, "\x93", 1, k_ui_align_middle_center, 0 );
 }
 
-static void menu_standard_widget( ui_context *ctx,
-                                  ui_rect inout_panel, ui_rect rect, ui_px s )
+static void menu_standard_widget( ui_context *ctx, ui_rect inout_panel, ui_rect rect, ui_px s )
 {
    ui_split( inout_panel, k_ui_axis_h, ctx->font->sy*s*2, 8, rect, inout_panel );
 }
@@ -208,7 +207,8 @@ bool menu_button_rect( ui_context *ctx, ui_rect rect, bool select, bool clickabl
       ui_fill( ctx, rect, GUI_COL_DARK );
    }
 
-   ui_text( ctx, rect, text, 1, k_ui_align_middle_center, clickable? 0: ui_colour(ctx,k_ui_bg) );
+   if( text )
+      ui_text( ctx, rect, text, 1, k_ui_align_middle_center, clickable? 0: ui_colour(ctx,k_ui_bg) );
 
    if( state == k_ui_button_click )
    {
@@ -227,8 +227,7 @@ static bool menu_button( ui_context *ctx, ui_rect inout_panel, bool select, bool
    return menu_button_rect( ctx, rect, select, clickable, text );
 }
 
-static bool menu_checkbox( ui_context *ctx, ui_rect inout_panel, bool select, 
-                           const char *str_label, i32 *data )
+static bool menu_checkbox( ui_context *ctx, ui_rect inout_panel, bool select, const char *str_label, i32 *data )
 {
    ui_rect rect, label, box;
    menu_standard_widget( ctx, inout_panel, rect, 1 );
@@ -294,8 +293,7 @@ static bool menu_checkbox( ui_context *ctx, ui_rect inout_panel, bool select,
    else return 0;
 }
 
-static void menu_heading( ui_context *ctx,
-                          ui_rect inout_panel, const char *label, u32 colour )
+static void menu_heading( ui_context *ctx, ui_rect inout_panel, const char *label, u32 colour )
 {
    ui_rect rect;
    menu_standard_widget( ctx, inout_panel, rect, 1 );
@@ -315,8 +313,7 @@ static void menu_heading( ui_context *ctx,
    ui_text( ctx, rect, label, 1, k_ui_align_middle_center, 1 );
    rect[0] += 1;
    rect[1] -= 1;
-   ui_text( ctx, rect, label, 1, k_ui_align_middle_center, colour? colour:
-            ui_colour(ctx, k_ui_blue+k_ui_brighter) );
+   ui_text( ctx, rect, label, 1, k_ui_align_middle_center, colour? colour: ui_colour(ctx, k_ui_blue+k_ui_brighter) );
 }
 
 static u32 medal_colour( ui_context *ctx, u32 flags )
@@ -817,13 +814,42 @@ void menu_gui( ui_context *ctx )
             return;
          }
 
-         if( menu_button( ctx, list, R == 1, 1, "Credits" ) )
+         ui_rect online_box;
+         ui_split( list, k_ui_axis_h, 128, 8, online_box, list );
+         ui_fill( ctx, online_box, ui_opacity( GUI_COL_DARK, 0.3f ) );
+         ui_outline( ctx, online_box, 1, GUI_COL_NORM, 0 );
+
+         ui_rect inner_online_panel;
+         rect_copy( online_box, inner_online_panel );
+         ui_rect_pad( inner_online_panel, (ui_px[2]){8,8} );
+         
+         ctx->font = &vgf_default_large;
+         i32 temp = network_client.user_intent;
+         if( menu_checkbox( ctx, inner_online_panel, R == 1, "Online Mode", &temp ) )
+            network_client.user_intent = temp;
+            
+         ui_rect label_box;
+         ctx->font = &vgf_default_small;
+         menu_standard_widget( ctx, inner_online_panel, label_box, 1 );
+         ui_text( ctx, label_box, "Connection status:", 1, k_ui_align_middle_left, 0 );
+
+         char buf[128];
+         vg_str str;
+         vg_strnull( &str, buf, sizeof(buf) );
+         u32 colour;
+         network_status_string( &str, &colour );
+         menu_standard_widget( ctx, inner_online_panel, label_box, 1 );
+         ui_text( ctx, label_box, buf, 1, k_ui_align_middle_left, colour );
+
+         ctx->font = &vgf_default_title;
+
+         if( menu_button( ctx, list, R == 2, 1, "Credits" ) )
          {
             menu.page = k_menu_page_credits;
          }
 
          ui_rect end = { list[0], list[1]+list[3]-64, list[2], 72 };
-         if( menu_button( ctx, end, R == 2, 1, "Quit Game" ) )
+         if( menu_button( ctx, end, R == 3, 1, "Quit Game" ) )
          {
             vg.window_should_close = 1;
          }
@@ -838,24 +864,18 @@ void menu_gui( ui_context *ctx )
          ctx->font = &vgf_default_large;
          list[1] -= 8;
          menu_heading( ctx, list, "Game", 0 );
-         menu_checkbox( ctx, list, R == 0, "Show controls overlay",
-               &control_overlay.enabled );
-         menu_checkbox( ctx, list, R == 1, "Auto connect to global server",
-               &network_client.auto_connect );
+         menu_checkbox( ctx, list, R == 0, "Show controls overlay", &control_overlay.enabled );
+         menu_checkbox( ctx, list, R == 1, "Auto connect to global server", &network_client.auto_connect );
 
          menu_heading( ctx, list, "Audio/Video", 0 );
-         menu_slider( ctx, list, R == 2, "Volume", 0, 100, 
-                      &vg_audio.external_global_volume, "%.f%%" );
-         menu_slider( ctx, list, R == 3, "Resolution", 0, 100,
-                      &k_render_scale, "%.f%%" );
+         menu_slider( ctx, list, R == 2, "Volume", 0, 100, &vg_audio.external_global_volume, "%.f%%" );
+         menu_slider( ctx, list, R == 3, "Resolution", 0, 100, &k_render_scale, "%.f%%" );
          menu_checkbox( ctx, list, R == 4, "Motion Blur", &k_blur_effect );
 
          menu_heading( ctx, list, "Camera", 0 );
-         menu_slider( ctx, list, R == 5, "Fov", 97, 135,
-                      &k_fov, "%.1f\xb0" );
+         menu_slider( ctx, list, R == 5, "Fov", 97, 135, &k_fov, "%.1f\xb0" );
          menu_slider( ctx, list, R == 6, "Cam Height", -0.4f, +1.4f,
-                      &k_cam_height, vg_lerpf(-0.4f,1.4f,k_cam_height)>=0.0f? 
-                                      "+%.2fm": "%.2fm" );
+                      &k_cam_height, vg_lerpf(-0.4f,1.4f,k_cam_height)>=0.0f? "+%.2fm": "%.2fm" );
          menu_checkbox( ctx, list, R == 7, "Invert Y Axis", &k_invert_y );
 
 
index dbb5c5f3010f553972697cf75c4fe654f26e2b55..06e4d57d8ceb482385fb1b779bf17ccb84b78155 100644 (file)
@@ -262,14 +262,12 @@ void network_send_item( enum netmsg_playeritem_type type )
    if( !network_connected() )
       return;
 
-   netmsg_playeritem *item = 
-      alloca( sizeof(netmsg_playeritem) + ADDON_UID_MAX );
+   netmsg_playeritem *item = alloca( sizeof(netmsg_playeritem) + ADDON_UID_MAX );
    item->inetmsg_id = k_inetmsg_playeritem;
    item->type_index = type;
    item->client = 0;
 
-   if( (type == k_netmsg_playeritem_world0) ||
-       (type == k_netmsg_playeritem_world1) )
+   if( (type == k_netmsg_playeritem_world0) || (type == k_netmsg_playeritem_world1) )
    {
       addon_reg *reg = _world.main.addon;
 
@@ -325,16 +323,21 @@ static void network_disconnect(void){
 
 void network_status_string( vg_str *str, u32 *colour )
 {
-   if( skaterift.demo_mode ){
+   if( skaterift.demo_mode )
+   {
       vg_strcat( str, "Offline" );
+      *colour = 0xff0000a0;
       return;
    }
 
-   if( steam_ready ){
-      if( network_client.user_intent == k_server_intent_offline ){
+   if( steam_ready )
+   {
+      if( network_client.user_intent == k_server_intent_offline )
+      {
          vg_strcat( str, "Offline" );
       }
-      else {
+      else 
+      {
          ESteamNetworkingConnectionState state = network_client.state;
 
          if( state == k_ESteamNetworkingConnectionState_None )
@@ -343,13 +346,15 @@ void network_status_string( vg_str *str, u32 *colour )
          {
             vg_strcatf( str, "Connecting...\n%s", network_client.host_adress );
 
-            if( network_client.retries ){
+            if( network_client.retries )
+            {
                vg_strcat( str, "\n(" );
                vg_strcati32( str, network_client.retries );
                vg_strcat( str, " retries)" );
             }
          }
-         else if( state == k_ESteamNetworkingConnectionState_Connected ){
+         else if( state == k_ESteamNetworkingConnectionState_Connected )
+         {
             vg_strcatf( str, "Connected to:\n%s", network_client.host_adress );
             *colour = 0xff00a020;
          }
@@ -357,8 +362,8 @@ void network_status_string( vg_str *str, u32 *colour )
             vg_strcat( str, "Connection Closed" );
          else if( state == k_ESteamNetworkingConnectionState_FindingRoute )
             vg_strcat( str, "Finding Route" );
-         else if( state ==
-               k_ESteamNetworkingConnectionState_ProblemDetectedLocally){
+         else if( state == k_ESteamNetworkingConnectionState_ProblemDetectedLocally)
+         {
             vg_strcat( str, "Problem Detected\nLocally" );
             *colour = 0xff0000a0;
          }
@@ -366,7 +371,8 @@ void network_status_string( vg_str *str, u32 *colour )
             vg_strcat( str, "???" );
       }
    }
-   else {
+   else 
+   {
       vg_strcat( str, "Steam Offline" );
       *colour = 0xff0000a0;
    }
@@ -398,11 +404,11 @@ void render_server_status_gui(void)
    ui_text( ctx, r, buf, 1, k_ui_align_center, 0 );
    ui_flush( ctx, k_ui_shader_colour, NULL );
    
-   skaterift.rt_textures[ k_skaterift_rt_server_status ] =
-      g_render.fb_network_status->attachments[0].id;
+   skaterift.rt_textures[ k_skaterift_rt_server_status ] = g_render.fb_network_status->attachments[0].id;
 }
 
-static void on_server_connect_status( CallbackMsg_t *msg ){
+static void on_server_connect_status( CallbackMsg_t *msg )
+{
    SteamNetConnectionStatusChangedCallback_t *info = (void *)msg->m_pubParam;
    vg_info( "  Connection status changed for %lu\n", info->m_hConn );
    vg_info( "  %s -> %s\n", 
@@ -517,12 +523,14 @@ static void network_connect(void)
                   hSteamNetworkingSockets, &network_client.ip, 0, NULL );
 }
 
-static void network_sign_on_complete(void){
+static void network_sign_on_complete(void)
+{
    vg_success( "Sign on completed\n" );
 
    /* send our init info */
    network_send_username();
-   for( u32 i=0; i<k_netmsg_playeritem_max; i ++ ){
+   for( u32 i=0; i<k_netmsg_playeritem_max; i ++ )
+   {
       network_send_item(i);
    }
    network_send_region();
@@ -752,9 +760,9 @@ static int cmd_network_send_message( int argc, const char *argv[] ){
 
 void network_init(void)
 {
-   vg_console_reg_var( "auto_connect", &network_client.auto_connect,
-                       k_var_dtype_i32, VG_VAR_PERSISTENT );
-   if( steam_ready ){
+   vg_console_reg_var( "auto_connect", &network_client.auto_connect, k_var_dtype_i32, VG_VAR_PERSISTENT );
+   if( steam_ready )
+   {
       u32 alloc_size = sizeof(struct network_request)*NETWORK_MAX_REQUESTS;
       network_client.request_buffer = 
          vg_linear_alloc( vg_mem.rtmemory, alloc_size );