]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
if two name tags would overlap, hide the one that is further away from you
authorFruitieX <fruitiex@gmail.com>
Sun, 1 May 2011 13:57:24 +0000 (16:57 +0300)
committerFruitieX <fruitiex@gmail.com>
Sun, 1 May 2011 13:57:24 +0000 (16:57 +0300)
defaultXonotic.cfg
qcsrc/client/autocvars.qh
qcsrc/client/shownames.qc

index d725d5e1f9e1a8a1c83103cea64a866079a40626..145312227d4bfb0d2c72571bb432eb1433bc87b2 100644 (file)
@@ -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
index 006775ff70f899711fc74d16b6e40b63b35e47a4..d61e73dc60da21d5452d77b9eef0a6239c1e18d0 100644 (file)
@@ -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;
index ede0caa38f4805b0ad4fbaccc91907807794cb08..d876fd20842920efaf1374d874b216198bf2c2a3 100644 (file)
@@ -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;