From fc363ef69fd7ee4ed83ce44bf7b9b8332b7aaf2e Mon Sep 17 00:00:00 2001 From: hgn Date: Mon, 24 Feb 2025 03:44:36 +0000 Subject: [PATCH] Add network connect thing to menu --- src/menu.c | 66 +++++++++++++++++++++++++++++++++------------------ src/network.c | 50 ++++++++++++++++++++++---------------- 2 files changed, 72 insertions(+), 44 deletions(-) diff --git a/src/menu.c b/src/menu.c index 692ffe3..ed82d77 100644 --- a/src/menu.c +++ b/src/menu.c @@ -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 ); diff --git a/src/network.c b/src/network.c index dbb5c5f..06e4d57 100644 --- a/src/network.c +++ b/src/network.c @@ -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