From 4fa9aa9a1e09940e91cc30e171e3de0606515ef3 Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 11 Nov 2023 21:35:17 +0000 Subject: [PATCH] username medals display --- player_remote.c | 154 ++++++++++++++++++++++++------------------------ player_remote.h | 2 + skaterift.c | 1 - 3 files changed, 80 insertions(+), 77 deletions(-) diff --git a/player_remote.c b/player_remote.c index 493bc51..7a85910 100644 --- a/player_remote.c +++ b/player_remote.c @@ -355,37 +355,6 @@ static void remote_player_debug_update(void){ } } -static void remote_player_nametag( m4x4f pv, v3f co, const char *name ){ - vg_ui.font = &vg_ui_font_big; - v4f wpos; - v3_copy( co, wpos ); - wpos[1] += 2.0f; - wpos[3] = 1.0f; - - m4x4_mulv( pv, wpos, wpos ); - - if( wpos[3] > 0.0f ){ - v2_muls( wpos, (1.0f/wpos[3]) * 0.5f, wpos ); - v2_add( wpos, (v2f){ 0.5f, 0.5f }, wpos ); - - ui_rect wr; - wr[0] = vg_clampf(wpos[0] * vg.window_x, -32000.0f,32000.0f)-150; - wr[1] = vg_clampf((1.0f-wpos[1]) * vg.window_y, - -32000.0f,32000.0f); - - vg_ui.font = &vg_ui_font_big; - wr[2] = ui_text_line_width( name ); - wr[3] = 32; - - ui_fill( wr, ui_opacity( ui_colour(k_ui_bg), 0.6f ) ); - ui_text( wr, name, 1, k_ui_align_middle_center, 0 ); - - vg_ui.font = &vg_ui_font_small; - - } - vg_ui.font = &vg_ui_font_small; -} - /* * Debugging information */ @@ -607,50 +576,6 @@ static void render_remote_players( world_instance *world, camera *cam ){ SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); } -static void render_remote_player_nametag( v3f co, const char *name ){ - m4x3f mlocal; - m4x3_identity( mlocal ); - mlocal[3][0] -= font3d_string_width( 2, name ) * 0.5f; - - m4x3f mmdl; - m3x3_identity( mmdl ); - for( int i=0; i<3; i++ ) - v3_muls( skaterift.cam.mtx.v[i], 0.2f, mmdl[i] ); - m3x3_transpose( mmdl, mmdl ); - v3_add( co, (v3f){0.0f,2.0f,0.0f}, mmdl[3] ); - - m4x3_mul( mmdl, mlocal, mmdl ); - font3d_simple_draw( 2, name, &skaterift.cam, mmdl ); -} - -static void render_remote_players_tags( world_instance *world, camera *cam ){ - glEnable(GL_BLEND); - glEnable(GL_DEPTH_TEST); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - glBlendEquation(GL_FUNC_ADD); - - font3d_bind( &gui.font, k_font_shader_default, 1, NULL, &skaterift.cam ); - font3d_setcolour( (v4f){1.0f,1.0f,1.0f,1.0f} ); - - if( k_show_own_name ){ - render_remote_player_nametag( - localplayer.final_mtx[0][3], - steam_username_at_startup ); - } - - for( u32 i=0; iactive || player->isblocked ) continue; - if( player->active_world != world ) continue; - - render_remote_player_nametag( - netplayers.final_mtx[localplayer.skeleton.bone_count*i][3], - player->username ); - } - - glDisable(GL_BLEND); -} - static int remote_players_randomize( int argc, const char *argv[] ){ for( int i=0; imedals[i] = vg_randu32() % 3; + } + + v3f pos; + + vg_rand_sphere( pos ); + v3_muls( pos, 100.0f, + netplayers.final_mtx[ i*localplayer.skeleton.bone_count][3] ); } return 0; @@ -702,6 +637,73 @@ enum remote_player_gui_type { k_remote_player_gui_type_you, }; +/* TODO: + * line of sight / distance culling + */ +static void remote_player_nametag( m4x4f pv, v3f co, const char *name, + enum remote_player_gui_type type, + u32 medals[3] ){ + vg_ui.font = &vg_ui_font_big; + v4f wpos; + v3_copy( co, wpos ); + wpos[1] += 2.0f; + wpos[3] = 1.0f; + + m4x4_mulv( pv, wpos, wpos ); + + if( wpos[3] > 0.0f ){ + v2_muls( wpos, (1.0f/wpos[3]) * 0.5f, wpos ); + v2_add( wpos, (v2f){ 0.5f, 0.5f }, wpos ); + + vg_ui.font = &vg_ui_font_big; + ui_rect wr; + wr[2] = VG_MAX( ui_text_line_width( name ), 140 ) + 8; + wr[0] = vg_clampf(wpos[0] * vg.window_x, -32000.0f,32000.0f)-(wr[2]/2); + wr[1] = vg_clampf((1.0f-wpos[1]) * vg.window_y, -32000.0f, 32000.0f ); + wr[3] = 32; + + ui_fill( wr, ui_opacity( ui_colour(k_ui_bg), 0.6f ) ); + ui_text( wr, name, 1, k_ui_align_middle_center, 0 ); + + vg_ui.font = &vg_ui_font_small; + + /* medals */ + int cols = 0; + if( medals ){ + for( int i=0; i<3; i ++ ) + if( medals[i] ) + cols ++; + + char buf[32]; + vg_str str; + + if( cols ){ + f32 w = (f32)wr[2] / (f32)cols; + cols = 0; + + for( int i=0; i<3; i ++ ){ + if( medals[i] ){ + ui_rect col = { wr[0] + (f32)cols*w, wr[1] + wr[3], w, + vg_ui.font->glyph_height }; + + vg_strnull( &str, buf, 32 ); + vg_strcatch( &str, (char)k_SRglyph_ps4_circle ); + vg_strcati32( &str, medals[i] ); + + ui_text( col, buf, 1, k_ui_align_middle_center, + ui_colour( (enum ui_scheme_colour[]){ + k_ui_yellow, k_ui_gray, k_ui_orange }[i] ) ); + + cols ++; + } + } + } + } + + } + vg_ui.font = &vg_ui_font_small; +} + static void remote_player_gui_info( ui_rect box, const char *username, const char *activity, @@ -770,7 +772,7 @@ static void remote_players_imgui_world( world_instance *world, m4x4f pv, remote_player_nametag( pv, netplayers.final_mtx[localplayer.skeleton.bone_count*i][3], - player->username ); + player->username, player->isfriend, player->medals ); } } } diff --git a/player_remote.h b/player_remote.h index fe72e60..9ac3186 100644 --- a/player_remote.h +++ b/player_remote.h @@ -23,6 +23,8 @@ struct { char username[ NETWORK_USERNAME_MAX ]; char items[k_netmsg_playeritem_max][ADDON_UID_MAX]; + u32 medals[3]; + u32 down_bytes; f32 down_kbs; } diff --git a/skaterift.c b/skaterift.c index 8aa061b..1fec3c7 100644 --- a/skaterift.c +++ b/skaterift.c @@ -467,7 +467,6 @@ static void render_player_transparent(void){ /* Draw player to window buffer and blend background ontop */ player__render( &small_cam ); - render_remote_players_tags( localplayer.viewable_world, &skaterift.cam ); } static void render_scene(void){ -- 2.25.1