]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Improve detection of overlapping player tags by checking if the boxes they are contai...
authorterencehill <piuntn@gmail.com>
Mon, 25 Jan 2021 16:49:20 +0000 (17:49 +0100)
committerterencehill <piuntn@gmail.com>
Mon, 25 Jan 2021 17:12:47 +0000 (18:12 +0100)
_hud_common.cfg
qcsrc/client/shownames.qc
qcsrc/client/shownames.qh

index 4973ef0bc008d88d2dc1e1f6dda768c30c451961..4bcb35e746f1bd0067e95dd77332fbf53c045d0f 100644 (file)
@@ -251,6 +251,5 @@ 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 5000 "alpha/size is 0 at this distance"
-seta hud_shownames_antioverlap 1 "if two tags get too close to each other, fade out the one further away from you"
-seta hud_shownames_antioverlap_distance 50 "2d distance to other tag after which to fade out"
+seta hud_shownames_antioverlap 1 "if two tags overlap, fade out the one further away from you"
 seta hud_shownames_offset 52 "offset (along z-axis) tag from player origin by this many units"
index ccf3176e71ef0ede93c35d1df9c334fd53aff70e..0bde46a15cb201c08a9c2cfdae59b88e06fd6d99 100644 (file)
@@ -31,6 +31,10 @@ STATIC_INIT(shownames_ent)
        }
 }
 
+// used by the antioverlap code
+.vector box_ofs;
+.vector box_org;
+
 const float SHOWNAMES_FADESPEED = 4;
 const float SHOWNAMES_FADEDELAY = 0.4;
 void Draw_ShowNames(entity this)
@@ -86,7 +90,7 @@ void Draw_ShowNames(entity this)
                        vector eo = project_3d_to_2d(it.origin + eZ * autocvar_hud_shownames_offset);
                        if (OFF_SCREEN(eo)) continue;
                        eo.z = 0;
-                       if (vdist((vec2(o) - eo), <, autocvar_hud_shownames_antioverlap_distance)
+                       if (boxesoverlap(this.box_org - this.box_ofs, this.box_org + this.box_ofs, it.box_org - it.box_ofs, it.box_org + it.box_ofs)
                                && vlen2(it.origin - view_origin) < vlen2(this.origin - view_origin))
                        {
                                overlap = 1;
@@ -154,23 +158,30 @@ void Draw_ShowNames(entity this)
                        resize = 0.5 + 0.5 * (f - max(0, dist - autocvar_hud_shownames_mindistance)) / f;
                }
        }
-       // draw the sprite image
+
        if (o.z >= 0)
        {
                o.z = 0;
                vector mySize = (vec2(autocvar_hud_shownames_aspect, 1)) * autocvar_hud_shownames_fontsize;
                vector myPos = o - vec2(0.5 * mySize.x, mySize.y);
-               // size scaling
                mySize.x *= resize;
                mySize.y *= resize;
                myPos.x += 0.5 * (mySize.x / resize - mySize.x);
                myPos.y += (mySize.y / resize - mySize.y);
-               // this is where the origin of the string
+
+               this.box_org = myPos + mySize / 2;
+               this.box_ofs = mySize / 2;
+
                float namewidth = mySize.x;
                if (autocvar_hud_shownames_status && this.sameteam && !this.csqcmodel_isdead)
                {
                        vector pos = myPos + eY * autocvar_hud_shownames_fontsize * resize;
                        vector sz = vec2(0.5 * mySize.x, resize * autocvar_hud_shownames_statusbar_height);
+
+                       this.box_ofs.x = max(mySize.x / 2, sz.x); // sz.x is already half as wide
+                       this.box_ofs.y += sz.y / 2;
+                       this.box_org.y = myPos.y + (mySize.y + sz.y) / 2;
+
                        if (autocvar_hud_shownames_statusbar_highlight)
                                drawfill(pos + eX * 0.25 * mySize.x, sz, '0.7 0.7 0.7', a / 2, DRAWFLAG_NORMAL);
                        if (this.healthvalue > 0)
index b5bf6bacc4347518129ac38dc0acd27b56ba5f9b..38d68fa7c2224531d7279cae6ca647fd831efd0b 100644 (file)
@@ -17,7 +17,6 @@ bool autocvar_hud_shownames_resize;
 float autocvar_hud_shownames_mindistance;
 float autocvar_hud_shownames_maxdistance;
 bool autocvar_hud_shownames_antioverlap;
-float autocvar_hud_shownames_antioverlap_distance;
 float autocvar_hud_shownames_offset;
 
 entityclass(ShowNames);