server status lever and display
[carveJwlIkooP6JGAAIwe30JlM.git] / network.c
index 8833d19caf704b5d8cdc9585a60d374aee8c58ce..ecd85878a60c0b8cc8931abfa9428bfa898920b9 100644 (file)
--- a/network.c
+++ b/network.c
@@ -6,6 +6,7 @@
 #include "world.h"
 #include "world_sfd.h"
 #include "world_routes.h"
+#include "vg/vg_imgui.h"
 
 static void scores_update(void);
 
@@ -277,6 +278,71 @@ 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;
+
+   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_strcat( &str, "Connecting to:\nskaterift.com" );
+
+            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_strcat( &str, "Connected to:\nskaterift.com" );
+            bg = 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" );
+            bg = 0xff0000a0;
+         }
+         else
+            vg_strcat( &str, "???" );
+      }
+   }
+   else {
+      vg_strcat( &str, "No Steam Connection" );
+      bg = 0xff0000a0;
+   }
+
+   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;
+}
+
 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 );
@@ -329,6 +395,8 @@ static void on_server_connect_status( CallbackMsg_t *msg ){
    else{
       //vg_warn( "  Recieved signal from unknown connection\n" );
    }
+
+   render_server_status_gui();
 }
 
 static void on_persona_state_change( CallbackMsg_t *msg ){