X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_remote.c;fp=player_remote.c;h=7a85910d2781edd3a03c45bddd0ccaf26aa557e0;hb=4fa9aa9a1e09940e91cc30e171e3de0606515ef3;hp=493bc513b1dc1f12b25a8c3a7ea2d9c6d35114e1;hpb=b35ac7383d4aba1d0b8a74be7bf1695996ff57f4;p=carveJwlIkooP6JGAAIwe30JlM.git 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 ); } } }