#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);
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,
}
}
-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 );
for( u32 i=0; i<k_netmsg_playeritem_max; i ++ ){
network_send_item(i);
}
+ network_send_region();
}
static void poll_remote_connection(void){