completed all glider stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / network.c
index ecd85878a60c0b8cc8931abfa9428bfa898920b9..3bb59b3e6c08e708b34958372587e41756e6332c 100644 (file)
--- 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,70 @@ 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( skaterift.demo_mode ){
+      vg_strcat( str, "Offline" );
+      return;
+   }
 
    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 +484,7 @@ static void network_sign_on_complete(void){
    for( u32 i=0; i<k_netmsg_playeritem_max; i ++ ){
       network_send_item(i);
    }
+   network_send_region();
 }
 
 static void poll_remote_connection(void){
@@ -527,7 +557,7 @@ static void network_update(void){
       if( frame_delta > NETWORK_FRAMERATE ){
          network_client.last_frame = vg.time_real;
          remote_player_send_playerframe();
-         player__clear_sfx_buffer();
+         localplayer.sfx_buffer_count = 0;
       }
 
       remote_player_debug_update();