From: FruitieX Date: Sun, 1 May 2011 13:57:24 +0000 (+0300) Subject: if two name tags would overlap, hide the one that is further away from you X-Git-Tag: xonotic-v0.5.0~266 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=2e8eb5e57c799ac076bf9d5b82711fb9cacceec5;p=xonotic%2Fxonotic-data.pk3dir.git if two name tags would overlap, hide the one that is further away from you --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index d725d5e1f..145312227 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -1503,6 +1503,7 @@ seta hud_shownames_alpha 0.7 "alpha" seta hud_shownames_resize 1 "enable resizing of the names, then the size cvars will correspond to the maximum size" seta hud_shownames_mindistance 1000 "start fading alpha/size at this distance" seta hud_shownames_maxdistance 2500 "alpha/size is 0 at this distance" +seta hud_shownames_antioverlap_distance 125 "2d distance to another tag after which to fade out the one further away from you" // scoreboard seta scoreboard_columns default diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 006775ff7..d61e73dc6 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -287,6 +287,7 @@ float autocvar_hud_shownames_alpha; float autocvar_hud_shownames_resize; float autocvar_hud_shownames_mindistance; float autocvar_hud_shownames_maxdistance; +float autocvar_hud_shownames_antioverlap_distance; string autocvar_hud_skin; float autocvar_loddebug; float autocvar_menu_mouse_speed; diff --git a/qcsrc/client/shownames.qc b/qcsrc/client/shownames.qc index ede0caa38..d876fd208 100644 --- a/qcsrc/client/shownames.qc +++ b/qcsrc/client/shownames.qc @@ -28,10 +28,34 @@ void Draw_ShowNames() }*/ } + vector o, eo; + o = project_3d_to_2d(self.origin); + + // fade tag out if another tag that is closer to you overlaps + entity e; + float overlap; + for(e = world; (e = find(e, classname, "shownames_tag")); ) + { + if(e == self) + continue; + eo = project_3d_to_2d(e.origin); + if not(eo_z < 0 || eo_x < 0 || eo_y < 0 || eo_x > vid_conwidth || eo_y > vid_conheight) + { + eo_z = 0; + if(vlen((eX * o_x + eY * o_y) - eo) < autocvar_hud_shownames_antioverlap_distance && vlen(self.origin - view_origin) > vlen(e.origin - view_origin)) + { + overlap = TRUE; + break; + } + } + } + if(!self.sameteam && trace_endpos != view_origin) // out of view, fade out self.alpha = max(0, self.alpha - SHOWNAMES_FADESPEED * frametime); else if(!self.healthvalue) // dead player, fade out slowly self.alpha = max(0, self.alpha - SHOWNAMES_FADESPEED * 0.25 * frametime); + else if(overlap) // tag overlap detected, fade out + self.alpha = max(0, self.alpha - SHOWNAMES_FADESPEED * frametime); else // fade in self.alpha = min(1, self.alpha + SHOWNAMES_FADESPEED * frametime); @@ -43,8 +67,7 @@ void Draw_ShowNames() float a; a = autocvar_hud_shownames_alpha; - if(self.alpha) - a *= self.alpha; + a *= self.alpha; if(autocvar_hud_shownames_maxdistance) { if(dist >= autocvar_hud_shownames_maxdistance) @@ -52,15 +75,15 @@ void Draw_ShowNames() a *= ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance); } + if(!a) + return; + float resize; resize = 1; if(autocvar_hud_shownames_resize) // limit resize so its never smaller than 0.5... gets unreadable resize = 0.5 + 0.5 * ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance); // draw the sprite image - vector o; - o = project_3d_to_2d(self.origin); - if not(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight) { o_z = 0;