From 9723ed75d4da703c91603d251816ce476a1e9098 Mon Sep 17 00:00:00 2001 From: hgn Date: Fri, 24 Nov 2023 04:27:21 +0000 Subject: [PATCH] server status lever and display --- ent_miniworld.c | 2 +- ent_skateshop.c | 13 +++++--- maps_src/dev_hub/main.mdl | Bin 409856 -> 410280 bytes network.c | 68 ++++++++++++++++++++++++++++++++++++++ network.h | 1 + player_remote.c | 6 ++-- render.h | 19 ++++++++++- skaterift.h | 1 + 8 files changed, 100 insertions(+), 10 deletions(-) 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 ba17643b7fd3e1b786a84c5e605c2063be7a7571..c0b7c7e9eba3d6b02642ebb9fb4ed3a2f37a9fd4 100644 GIT binary patch delta 1524 zcmaJ=ZD?C%6n@{^q|I%bG)b-bYI{4|ACqNcThy!{*j5;BuFO;h+KIMtjWe$KFin>z zR^z11A9FMu)G7lj40J_=k>Un!Eh}P0)KQ#JVM6>DL8NnoRiV`9+}sY8;UVw2=RD8z zo_pT+p5#w>KbiDSwKwM!A*2vuER&8Uj*cO!*i&X9>I;2tbIBrvxA2U+bEi!RE68rF z_{iu`Jd%l~W06tTe_bzx2~UT?Wum#vcsk0Ius8~z`4sqXe4Q2u_-zkhMH88!EZ1NW ztk>WIh?yHpMY0K<5hCTF7U@&oa!{xAb>^HxRDs#7l1e92hERB1l}`GND#_j8tAn2$rU;${T&zGLg4Ioio|1yST>m+9Rb$rskFIb6gi4E5$d)^>(VbvC5 zC4WU%2S#r>JC;gEkH?}}Ay#QX@yk_;D}M7TbT{a2#of}nze>EerP3l_Vk|KdJ7U!K zT%|?j^DRs3$3o%JNFusp&x0W`J3GHPzj1Kyp(h`I;=oY2@8I74;&|19q&?=<&_g?$ z9(ncJqrHa*<)U)miJr}6w91b>em!OceC^X%Flwvbu2v&p>=F%D2h|!xd>bqD4l>o? z%CuY^q~01kxoURQ^2g^LO_Cm~*{$-SIqjv%nxKl|&Lv&tCRp**z?u0EuDq~-IEeUR#QJH{Xwe7VZHlUzjdz`@ z(C;)*r|HPW)`}=e6Lp$}HTs3m)ZL=9u7C~Y^T2fbmI}5mX`x>%8l`Lvv|&?a zfK+>zX&5rxtw!7IUYVyi>|L1d%OLbxYxY*>6cphFDW*CqwbtnV`lR<7P?nVNEE|jY za`Ak8QlihW9 zbz`6q+p1438$a4g$wPz|e?U>Aji4aZP(*8?)D(RXQt+V^OB)naQ0O@`R}b88?)lDl z&pl_(J$@iD^;x2pY1yO+A%zg-O3BTSmTBi(cTfmxx<4MA3JcLZ{ZYJUwo!=^Ih8N^YXErEQYZ+o5iT)wis$~ioh z5JeSRtzzZka5b-Dvo>0#qg}MoBb}b(bWMOF&$ARug`yIQfv8`}dn!xelbyL86?ZS! zG7-a9(ve}DkjZs_trUWKf01O|&AZh?X>5eJ!MI=MZIxt{%A~Dl9e5^_GJ=GbY>6a& z9sL=vopQBYEampPxvCIpY}Ar6jd3j*Oq1>(e5u7-Yi|d{M4MkC|3o)G;_gtni#PF; z_T$`4;IhH7h0 z5)-1`dec8~15fD0LGlJE8?wpy+q`8VumF6(D5T;rdaY8ZQ zIYP{kHi<>Wyg|ds5Hk$f*luhikK5aaHRM%R32~pid2A(bs8xucNqG+k8dD~B{YuJb zMsZd#_Z9Ou?keV7+SlxYVWxCGh1bl77_z$MJ?w5;iyM|=$Nv@!C#0Aq0Q>TMY|E#>~wUDn87Pj)Yef7vRim!7ZPWP<#)ut zWI-*CF3jzZq@;}EXf!KhSR`zM5qndvK!5CA^u;nb6YG#G$!o{cSO;#$GIIk>NA!jz z%EBf^99QZ(UwW#1O~k!%a;zDh&5z^)+7exa8$8_S;SV1E=HW9BJDo0>!DbKl6ZYa1 p;lSJ-=h(-e_e~z^o0Ri?liJL~Z<{X#B8T)sfR;Y57lPma{y%h-{>}gZ 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 }; -- 2.25.1