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 );
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){
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 {
#include "world.h"
#include "world_sfd.h"
#include "world_routes.h"
+#include "vg/vg_imgui.h"
static void scores_update(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 );
else{
//vg_warn( " Recieved signal from unknown connection\n" );
}
+
+ render_server_status_gui();
}
static void on_persona_state_change( CallbackMsg_t *msg ){
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;
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];
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){
framebuffer *fb_main,
*fb_water_reflection,
*fb_water_beneath,
- *fb_workshop_preview;
+ *fb_workshop_preview,
+ *fb_network_status;
int ready;
}
gpipeline;
.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
+ }
+ }
}
};
enum skaterift_rt {
k_skaterift_rt_workshop_preview,
+ k_skaterift_rt_server_status,
k_skaterift_rt_max
};