]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Optimization: replace a resource intensive vlen() call on every single player for...
authorMario <mario@smbclan.net>
Sat, 6 May 2017 10:33:48 +0000 (20:33 +1000)
committerMario <mario@smbclan.net>
Sat, 6 May 2017 10:33:48 +0000 (20:33 +1000)
qcsrc/server/bot/default/havocbot/roles.qc

index 5437c69308e978db12aeceabaa721fb77caf75fe..768d6803773b5dde05022dd5dd14f82c1fa89cc3 100644 (file)
@@ -44,7 +44,7 @@ void havocbot_goalrating_waypoints(entity this, float ratingscale, vector org, f
 
 void havocbot_goalrating_items(entity this, float ratingscale, vector org, float sradius)
 {
-       float rating, d, discard, friend_distance, enemy_distance;
+       float rating, discard, friend_distance, enemy_distance;
        vector o;
        ratingscale = ratingscale * 0.0001; // items are rated around 10000 already
 
@@ -85,7 +85,7 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
                                continue;
                        traceline(o, o + '0 0 -1500', true, NULL);
 
-                       d = pointcontents(trace_endpos + '0 0 1');
+                       float d = pointcontents(trace_endpos + '0 0 1');
                        if(d == CONTENT_WATER || d == CONTENT_SLIME || d == CONTENT_LAVA)
                                continue;
                        // this tracebox_hits_trigger_hurt call isn't needed:
@@ -110,17 +110,15 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
                        entity picker = it;
                        FOREACH_CLIENT(IS_PLAYER(it) && it != this && !IS_DEAD(it),
                        {
-                               d = vlen(it.origin - o); // distance between player and item
-
                                if ( it.team == this.team )
                                {
                                        if ( !IS_REAL_CLIENT(it) || discard )
                                                continue;
 
-                                       if( d > friend_distance)
+                                       if( vdist(it.origin - o, >, friend_distance) )
                                                continue;
 
-                                       friend_distance = d;
+                                       friend_distance = vlen(it.origin - o); // distance between player and item
                                        discard = true;
 
                                        if (picker.health && it.health > this.health) continue;
@@ -140,8 +138,8 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
                                {
                                        // If enemy only track distances
                                        // TODO: track only if visible ?
-                                       if( d < enemy_distance )
-                                               enemy_distance = d;
+                                       if( vdist(it.origin - o, <, enemy_distance) )
+                                               enemy_distance = vlen(it.origin - o); // distance between player and item
                                }
                        });