server status lever and display
authorhgn <hgodden00@gmail.com>
Fri, 24 Nov 2023 04:27:21 +0000 (04:27 +0000)
committerhgn <hgodden00@gmail.com>
Fri, 24 Nov 2023 04:27:21 +0000 (04:27 +0000)
ent_miniworld.c
ent_skateshop.c
maps_src/dev_hub/main.mdl
network.c
network.h
player_remote.c
render.h
skaterift.h

index e425fa2da2212d24651e1cf91a0f56496c23ee81..baee0c3cf34af6beaed44e789a871558e7f1c7c3 100644 (file)
@@ -87,7 +87,7 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){
       return;
 
    render_world_override( dest_world, host_world, global_miniworld.mmdl, cam,
-                          NULL, (v4f){-10000.0f,10000.0f,0.0f,0.0f} );
+                          NULL, (v4f){dest_world->tar_min,10000.0f,0.0f,0.0f} );
    render_world_routes( dest_world, host_world, 
                         global_miniworld.mmdl, cam, 0, 1 );
 
index 0084e19dd3829b4bdc44bff97cb8521a2689900f..eb30ad464ac4eb78fe9d54a1ca0bbff3060dca35 100644 (file)
@@ -192,18 +192,20 @@ static void skateshop_init_async(void *_data,u32 size){
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
+
+   skaterift.rt_textures[ k_skaterift_rt_workshop_preview ] =
+      global_skateshop.tex_preview_err;
+
+   skaterift.rt_textures[ k_skaterift_rt_server_status ] =
+      global_skateshop.tex_preview_err;
 }
 
 /*
  * VG event init
  */
 static void skateshop_init(void){
-   vg_async_call( skateshop_init_async, NULL, 0 );
    vg_tex2d_replace_with_error( &global_skateshop.tex_preview_err );
-   vg_async_stall();
-
-   skaterift.rt_textures[ k_skaterift_rt_workshop_preview ] =
-      global_skateshop.tex_preview_err;
+   vg_async_call( skateshop_init_async, NULL, 0 );
 }
 
 static u16 skateshop_selected_cache_id(void){
@@ -418,6 +420,7 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){
             network_client.user_intent = !network_client.user_intent;
             network_client.last_intent_change = vg.time_real;
             skateshop_server_helper_update();
+            render_server_status_gui();
          }
       }
       else {
index ba17643b7fd3e1b786a84c5e605c2063be7a7571..c0b7c7e9eba3d6b02642ebb9fb4ed3a2f37a9fd4 100644 (file)
Binary files a/maps_src/dev_hub/main.mdl and b/maps_src/dev_hub/main.mdl differ
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 ){
index f57bfe54b6525fb48410c5d2c19973b7f085e351..729029ac973637a5e8b621217556cdf0947c827c 100644 (file)
--- a/network.h
+++ b/network.h
@@ -87,6 +87,7 @@ static void network_request_scoreboard( const char *mod_uid,
 static void network_publish_laptime( const char *mod_uid, 
                                      const char *route_uid, f64 lap_time );
 static void chat_send_message( const char *message );
+static void render_server_status_gui(void);
 
 static int network_connected(void){
    if( network_client.remote_version != NETWORK_SKATERIFT_VERSION ) return 0;
index 82bc3da24ab24d29ed82d754fac781211ff6c188..0336624efa421dcdb71b311bcdbf8ba60cc11a7e 100644 (file)
@@ -841,7 +841,7 @@ static void remote_players_imgui_lobby(void){
 
 static void remote_players_imgui_world( world_instance *world, m4x4f pv,
                                         f32 max_dist, int geo_cull ){
-   ui_flush( k_ui_shader_colour );
+   ui_flush( k_ui_shader_colour, vg.window_x, vg.window_y );
 
    for( u32 i=0; i<NETWORK_MAX_PLAYERS; i++ ){
       struct network_player *player = &netplayers.list[i];
@@ -886,14 +886,14 @@ static void remote_players_imgui_world( world_instance *world, m4x4f pv,
          remote_player_world_gui( pv, co, player );
 
          vg_ui.colour[3] = player->opacity;
-         ui_flush( k_ui_shader_colour );
+         ui_flush( k_ui_shader_colour, vg.window_x, vg.window_y );
       }
    }
 
    vg_ui.colour[3] = 1.0f;
 
    remote_player_world_gui( pv, localplayer.rb.co, NULL );
-   ui_flush( k_ui_shader_colour );
+   ui_flush( k_ui_shader_colour, vg.window_x, vg.window_y );
 }
 
 static void chat_escape(void){
index 8310ca535bb166ad9f084aa81f9c7ae4a368b024..22c05726ddd0222a7b567e6b47c1c87ddea18540 100644 (file)
--- a/render.h
+++ b/render.h
@@ -34,7 +34,8 @@ static struct pipeline{
    framebuffer *fb_main,
                *fb_water_reflection,
                *fb_water_beneath,
-               *fb_workshop_preview;
+               *fb_workshop_preview,
+               *fb_network_status;
    int ready;
 }
 gpipeline;
@@ -191,6 +192,22 @@ framebuffers[] =
             .attachment = GL_DEPTH_STENCIL_ATTACHMENT
          }
       }
+   },
+   {
+      "network_status_ui",
+      .link = &gpipeline.fb_network_status,
+      .resolution_div = 0,
+      .fixed_w = 128, .fixed_h = 48,
+      .attachments = 
+      {
+         {
+            "colour", k_framebuffer_attachment_type_texture,
+            .internalformat = GL_RGB,
+            .format         = GL_RGB,
+            .type           = GL_UNSIGNED_BYTE,
+            .attachment     = GL_COLOR_ATTACHMENT0
+         }
+      }
    }
 };
 
index 9a1e0c53c704f949f0ece5f024b07d0e797f4d84..21814df255fad59d6b0644634d84df0188d40587 100644 (file)
@@ -14,6 +14,7 @@
 
 enum skaterift_rt {
    k_skaterift_rt_workshop_preview,
+   k_skaterift_rt_server_status,
    k_skaterift_rt_max
 };