X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=network.c;h=14edfafb1d464a7a219e05d308007d31b657567a;hb=5f5d02725031cad23f1cab3290b8a9d661c89728;hp=ecd85878a60c0b8cc8931abfa9428bfa898920b9;hpb=9723ed75d4da703c91603d251816ce476a1e9098;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/network.c b/network.c index ecd8587..14edfaf 100644 --- a/network.c +++ b/network.c @@ -7,6 +7,8 @@ #include "world_sfd.h" #include "world_routes.h" #include "vg/vg_imgui.h" +#include "gui.h" +#include "ent_region.h" static void scores_update(void); @@ -77,6 +79,25 @@ static void network_send_username(void){ k_nSteamNetworkingSend_Reliable, NULL ); } +static void network_send_region(void){ + if( !network_connected() ) + return; + + netmsg_region *region = alloca( sizeof(netmsg_region) + NETWORK_REGION_MAX ); + + region->inetmsg_id = k_inetmsg_region; + region->client = 0; + region->flags = global_ent_region.flags; + + u32 l = vg_strncpy( global_ent_region.location, region->loc, + NETWORK_REGION_MAX, k_strncpy_always_add_null ); + + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( + hSteamNetworkingSockets, network_client.remote, + region, sizeof(netmsg_region)+l+1, + k_nSteamNetworkingSend_Reliable, NULL ); +} + static void network_send_request( netmsg_request *req, vg_msg *body, void (*callback)( netmsg_request *res, vg_msg *body, @@ -278,62 +299,65 @@ static void network_disconnect(void){ } } -static void render_server_status_gui(void){ - render_fb_bind( gpipeline.fb_workshop_preview, 0 ); - - /* HACK */ - vg_ui.cur_vert = 0; - vg_ui.cur_indice = 0; - vg_ui.vert_start = 0; - vg_ui.indice_start = 0; - - ui_rect r = { 0, 0, 128, 48 }; - - char buf[128]; - vg_str str; - vg_strnull( &str, buf, sizeof(buf) ); - - u32 bg = 0xff000000; - +static void network_status_string( vg_str *str, u32 *colour ){ if( steam_ready ){ if( network_client.user_intent == k_server_intent_offline ){ - vg_strcat( &str, "Offline" ); + vg_strcat( str, "Offline" ); } else { ESteamNetworkingConnectionState state = network_client.state; if( state == k_ESteamNetworkingConnectionState_None ) - vg_strcat( &str, "No Connection" ); + vg_strcat( str, "No Connection" ); else if( state == k_ESteamNetworkingConnectionState_Connecting ){ - vg_strcat( &str, "Connecting to:\nskaterift.com" ); + vg_strcat( str, "Connecting to:\nskaterift.com" ); if( network_client.retries ){ - vg_strcat( &str, "\n(" ); - vg_strcati32( &str, network_client.retries ); - vg_strcat( &str, " retries)" ); + vg_strcat( str, "\n(" ); + vg_strcati32( str, network_client.retries ); + vg_strcat( str, " retries)" ); } } else if( state == k_ESteamNetworkingConnectionState_Connected ){ - vg_strcat( &str, "Connected to:\nskaterift.com" ); - bg = 0xff00a020; + vg_strcat( str, "Connected to:\nskaterift.com" ); + *colour = 0xff00a020; } else if( state == k_ESteamNetworkingConnectionState_ClosedByPeer ) - vg_strcat( &str, "Connection Closed" ); + vg_strcat( str, "Connection Closed" ); else if( state == k_ESteamNetworkingConnectionState_FindingRoute ) - vg_strcat( &str, "Finding Route" ); + vg_strcat( str, "Finding Route" ); else if( state == k_ESteamNetworkingConnectionState_ProblemDetectedLocally){ - vg_strcat( &str, "Problem Detected\nLocally" ); - bg = 0xff0000a0; + vg_strcat( str, "Problem Detected\nLocally" ); + *colour = 0xff0000a0; } else - vg_strcat( &str, "???" ); + vg_strcat( str, "???" ); } } else { - vg_strcat( &str, "No Steam Connection" ); - bg = 0xff0000a0; + vg_strcat( str, "Steam Offline" ); + *colour = 0xff0000a0; } +} + +static void render_server_status_gui(void){ + render_fb_bind( gpipeline.fb_workshop_preview, 0 ); + + /* HACK */ + vg_ui.cur_vert = 0; + vg_ui.cur_indice = 0; + vg_ui.vert_start = 0; + vg_ui.indice_start = 0; + + ui_rect r = { 0, 0, 128, 48 }; + + char buf[128]; + vg_str str; + vg_strnull( &str, buf, sizeof(buf) ); + + u32 bg = 0xff000000; + network_status_string( &str, &bg ); ui_fill( r, bg ); ui_text( r, buf, 1, k_ui_align_center, 0 ); @@ -455,6 +479,7 @@ static void network_sign_on_complete(void){ for( u32 i=0; i