From: hgn Date: Fri, 24 Nov 2023 04:27:21 +0000 (+0000) Subject: server status lever and display X-Git-Url: https://skaterift.com/git/?a=commitdiff_plain;h=9723ed75d4da703c91603d251816ce476a1e9098;p=carveJwlIkooP6JGAAIwe30JlM.git server status lever and display --- diff --git a/ent_miniworld.c b/ent_miniworld.c index e425fa2..baee0c3 100644 --- a/ent_miniworld.c +++ b/ent_miniworld.c @@ -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 ); diff --git a/ent_skateshop.c b/ent_skateshop.c index 0084e19..eb30ad4 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -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 { diff --git a/maps_src/dev_hub/main.mdl b/maps_src/dev_hub/main.mdl index ba17643..c0b7c7e 100644 Binary files a/maps_src/dev_hub/main.mdl and b/maps_src/dev_hub/main.mdl differ diff --git a/network.c b/network.c index 8833d19..ecd8587 100644 --- 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 ){ diff --git a/network.h b/network.h index f57bfe5..729029a 100644 --- 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; diff --git a/player_remote.c b/player_remote.c index 82bc3da..0336624 100644 --- a/player_remote.c +++ b/player_remote.c @@ -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; iopacity; - 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){ diff --git a/render.h b/render.h index 8310ca5..22c0572 100644 --- 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 + } + } } }; diff --git a/skaterift.h b/skaterift.h index 9a1e0c5..21814df 100644 --- a/skaterift.h +++ b/skaterift.h @@ -14,6 +14,7 @@ enum skaterift_rt { k_skaterift_rt_workshop_preview, + k_skaterift_rt_server_status, k_skaterift_rt_max };