From 2127d37aa8b0b226ed608b503dc00d1b30073401 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 6 May 2017 20:33:48 +1000 Subject: [PATCH] Optimization: replace a resource intensive vlen() call on every single player for each bot when rating items with vdist() --- qcsrc/server/bot/default/havocbot/roles.qc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/qcsrc/server/bot/default/havocbot/roles.qc b/qcsrc/server/bot/default/havocbot/roles.qc index 5437c6930..768d68037 100644 --- a/qcsrc/server/bot/default/havocbot/roles.qc +++ b/qcsrc/server/bot/default/havocbot/roles.qc @@ -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 } }); -- 2.39.2