]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add minor optimizations and comments
authorterencehill <piuntn@gmail.com>
Mon, 29 Mar 2021 16:20:28 +0000 (18:20 +0200)
committerterencehill <piuntn@gmail.com>
Mon, 29 Mar 2021 16:20:28 +0000 (18:20 +0200)
qcsrc/client/shownames.qc
qcsrc/lib/intrusivelist.qh
qcsrc/lib/spawnfunc.qh
qcsrc/server/bot/default/bot.qh

index f07e66fb573c43dc35ee69f68447352d9cfe1f01..fa04f8abdacb243e632ba2810fbf0c5862144a49 100644 (file)
@@ -154,67 +154,67 @@ void Draw_ShowNames(entity this)
        }
        else if (vdist(this.origin - view_origin, >=, max_shot_distance))
                return;
-       if (!a) return;
-       float resize = 1;
-       if (autocvar_hud_shownames_resize)  // limit resize so its never smaller than 0.5... gets unreadable
-       {
-               if (vdist(this.origin - view_origin, >=, autocvar_hud_shownames_mindistance))
-               {
-                       float f = autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance;
-                       if (dist == -1)
-                               dist = vlen(this.origin - view_origin);
-                       resize = 0.5 + 0.5 * (f - max(0, dist - autocvar_hud_shownames_mindistance)) / f;
-               }
-       }
+       if (!a || o.z < 0) return;
 
-       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);
-               mySize.x *= resize;
-               mySize.y *= resize;
-               myPos.x += 0.5 * (mySize.x / resize - mySize.x);
-               myPos.y += (mySize.y / resize - mySize.y);
+       o.z = 0;
+       float resize = 1;
+       if (autocvar_hud_shownames_resize && vdist(this.origin - view_origin, >=, autocvar_hud_shownames_mindistance))
+       {
+               // limit resize so its never smaller than 0.5... gets unreadable
+               float f = autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance;
+               if (dist == -1)
+                       dist = vlen(this.origin - view_origin);
+               resize = 0.5 + 0.5 * (f - max(0, dist - autocvar_hud_shownames_mindistance)) / f;
+       }
+       vector mySize = (vec2(autocvar_hud_shownames_aspect, 1)) * autocvar_hud_shownames_fontsize;
+       vector myPos = o - vec2(0.5 * mySize.x, mySize.y);
+       mySize.x *= resize;
+       mySize.y *= resize;
+       myPos.x += 0.5 * (mySize.x / resize - mySize.x);
+       myPos.y += (mySize.y / resize - mySize.y);
 
-               this.box_org = myPos + mySize / 2;
-               this.box_ofs = mySize / 2;
+       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);
+       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;
+               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;
+               // antioverlap debug code
+               //drawfill(this.box_org - this.box_ofs, this.box_ofs * 2, '1 1 1', a / 2, DRAWFLAG_NORMAL);
 
-                       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)
-                       {
-                               HUD_Panel_DrawProgressBar(pos, sz, "nametag_statusbar",
-                                       this.healthvalue / autocvar_hud_panel_healtharmor_maxhealth, false, 1, '1 0 0', a,
-                                       DRAWFLAG_NORMAL);
-                       }
-                       if (GetResource(this, RES_ARMOR) > 0)
-                       {
-                               HUD_Panel_DrawProgressBar(pos + eX * 0.5 * mySize.x, sz, "nametag_statusbar",
-                                       GetResource(this, RES_ARMOR) / autocvar_hud_panel_healtharmor_maxarmor, false, 0, '0 1 0', a,
-                                       DRAWFLAG_NORMAL);
-                       }
+               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)
+               {
+                       HUD_Panel_DrawProgressBar(pos, sz, "nametag_statusbar",
+                               this.healthvalue / autocvar_hud_panel_healtharmor_maxhealth, false, 1, '1 0 0', a,
+                               DRAWFLAG_NORMAL);
+               }
+               if (GetResource(this, RES_ARMOR) > 0)
+               {
+                       HUD_Panel_DrawProgressBar(pos + eX * 0.5 * mySize.x, sz, "nametag_statusbar",
+                               GetResource(this, RES_ARMOR) / autocvar_hud_panel_healtharmor_maxarmor, false, 0, '0 1 0', a,
+                               DRAWFLAG_NORMAL);
                }
-               string s = entcs_GetName(this.sv_entnum - 1);
-               if ((autocvar_hud_shownames_decolorize == 1 && teamplay) || autocvar_hud_shownames_decolorize == 2)
-                       s = playername(s, entcs_GetTeam(this.sv_entnum - 1), true);
-               drawfontscale = '1 1 0' * resize;
-               s = textShortenToWidth(s, namewidth, '1 1 0' * autocvar_hud_shownames_fontsize, stringwidth_colors);
-               float width = stringwidth(s, true, '1 1 0' * autocvar_hud_shownames_fontsize);
-               myPos.x = o.x - (width * resize) / 2;
-               drawcolorcodedstring(myPos, s, '1 1 0' * autocvar_hud_shownames_fontsize, a, DRAWFLAG_NORMAL);
-               drawfontscale = '1 1 0';
        }
+       // antioverlap debug code
+       //else drawfill(this.box_org - this.box_ofs, this.box_ofs * 2, '1 1 1', a / 2, DRAWFLAG_NORMAL);
+
+       string s = entcs_GetName(this.sv_entnum - 1);
+       if ((autocvar_hud_shownames_decolorize == 1 && teamplay) || autocvar_hud_shownames_decolorize == 2)
+               s = playername(s, entcs_GetTeam(this.sv_entnum - 1), true);
+       drawfontscale = '1 1 0' * resize;
+       s = textShortenToWidth(s, namewidth, '1 1 0' * autocvar_hud_shownames_fontsize, stringwidth_colors);
+       float width = stringwidth(s, true, '1 1 0' * autocvar_hud_shownames_fontsize);
+       myPos.x = o.x - (width * resize) / 2;
+       drawcolorcodedstring(myPos, s, '1 1 0' * autocvar_hud_shownames_fontsize, a, DRAWFLAG_NORMAL);
+       drawfontscale = '1 1 0';
 }
 
 void Draw_ShowNames_All()
index dce561bb5124e1bb4d287e483ec80400988cd2b0..63a21565601085c4e34ce72c8aff021ae5fa70e6 100644 (file)
@@ -3,7 +3,7 @@
 #include "iter.qh"
 
 /**
- * This limitation is only towards maximum amount of creatable lists.
+ * Maximum amount of creatable lists.
  * Lists can be given endless amount of entities, only restricted by engine limitations.
  */
 const int IL_MAX = 128;
@@ -246,13 +246,16 @@ void IL_ENDFRAME()
 #endif
 }
 
-ERASEABLE
+// called when an entity is deleted with delete() / remove()
+// or when a player disconnects
 void ONREMOVE(entity this)
 {
-       if (this.il_lists) {
+       // remove 'this' from any intrusive lists it is on
+       vector lists = this.il_lists;
+       if (lists) {
                for (int i = 0; i < IL_MAX; ++i) {
                        IntrusiveList list = il_links[i];
-                       if ((this.il_lists & list.il_listmask) && IL_CONTAINS(list, this)) {
+                       if ((lists & list.il_listmask) && IL_CONTAINS(list, this)) {
                                IL_REMOVE(list, this);
                        }
                }
index d254364cefe2d38a4ecd228183d8d65a3043508d..db0d83ead7d2ff2ab26db36a57b03d373633f81b 100644 (file)
@@ -251,6 +251,10 @@ void _checkWhitelisted(entity this, string id)
        }
 }
 
+// this function simply avoids expanding IL_NEW during compilation
+// for each spawning entity
+void g_spawn_queue_spawn() { g_spawn_queue = IL_NEW(); }
+
 noref bool __spawnfunc_first;
 
 #define spawnfunc(id) \
@@ -265,7 +269,7 @@ noref bool __spawnfunc_first;
                if (__spawnfunc_expecting > 1) { __spawnfunc_expecting = 0; } \
                else if (__spawnfunc_expecting) { \
                        /* engine call */ \
-                       if (!g_spawn_queue) { g_spawn_queue = IL_NEW(); } \
+                       if (!g_spawn_queue) g_spawn_queue_spawn(); \
                        __spawnfunc_expecting = 0; \
                        this = __spawnfunc_expect; \
                        __spawnfunc_expect = NULL; \
index f94d282aabb957945806f3e0ef96ac2584a78687..618a766b8098aad90ce59c1b07acc76e1f5b5c21 100644 (file)
@@ -48,6 +48,8 @@ float bot_distance_close;
 entity bot_list;
 .entity nextbot;
 .string cleanname;
+// the *_freeme fields exist only to avoid an engine crash
+// when trying to strunzone the original fields
 .string netname_freeme;
 .string playermodel_freeme;
 .string playerskin_freeme;