+void network_status_string( vg_str *str, u32 *colour )
+{
+ if( skaterift.demo_mode ){
+ vg_strcat( str, "Offline" );
+ return;
+ }
+
+ if( steam_ready ){
+ if( network_client.user_intent == k_server_intent_offline ){
+ vg_strcat( str, "Offline" );
+ }
+ else {
+ ESteamNetworkingConnectionState state = network_client.state;
+
+ if( state == k_ESteamNetworkingConnectionState_None )
+ vg_strcat( str, "No Connection" );
+ else if( state == k_ESteamNetworkingConnectionState_Connecting )
+ {
+ vg_strcatf( str, "Connecting...\n%s", network_client.host_adress );
+
+ if( network_client.retries ){
+ vg_strcat( str, "\n(" );
+ vg_strcati32( str, network_client.retries );
+ vg_strcat( str, " retries)" );
+ }
+ }
+ else if( state == k_ESteamNetworkingConnectionState_Connected ){
+ vg_strcatf( str, "Connected to:\n%s", network_client.host_adress );
+ *colour = 0xff00a020;
+ }
+ else if( state == k_ESteamNetworkingConnectionState_ClosedByPeer )
+ vg_strcat( str, "Connection Closed" );
+ else if( state == k_ESteamNetworkingConnectionState_FindingRoute )
+ vg_strcat( str, "Finding Route" );
+ else if( state ==
+ k_ESteamNetworkingConnectionState_ProblemDetectedLocally){
+ vg_strcat( str, "Problem Detected\nLocally" );
+ *colour = 0xff0000a0;
+ }
+ else
+ vg_strcat( str, "???" );
+ }
+ }
+ else {
+ vg_strcat( str, "Steam Offline" );
+ *colour = 0xff0000a0;
+ }
+}
+
+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 );
+ ui_flush( k_ui_shader_colour, 128, 48 );
+
+ skaterift.rt_textures[ k_skaterift_rt_server_status ] =
+ gpipeline.fb_workshop_preview->attachments[0].id;
+}
+