diff --git a/main_shared/maps/mp/bots/_bot.gsc b/main_shared/maps/mp/bots/_bot.gsc index 6565b33..521b43c 100644 --- a/main_shared/maps/mp/bots/_bot.gsc +++ b/main_shared/maps/mp/bots/_bot.gsc @@ -16,6 +16,11 @@ init() if (!getDvarInt("bots_main")) return; + if(getDvar("bots_main_lowmem") == "") + setDvar("bots_main_lowmem", false);//lower memory usage mode, more cpu + + level.bots_lowmem = getDvarInt("bots_main_lowmem"); + thread load_waypoints(); cac_init_patch(); thread hook_callbacks(); diff --git a/main_shared/maps/mp/bots/_bot_utility.gsc b/main_shared/maps/mp/bots/_bot_utility.gsc index abdd58f..0b2a2ad 100644 --- a/main_shared/maps/mp/bots/_bot_utility.gsc +++ b/main_shared/maps/mp/bots/_bot_utility.gsc @@ -1209,7 +1209,10 @@ load_waypoints() level.waypoints[i].childCount = level.waypoints[i].children.size; } - level.waypointsKDTree = WaypointsToKDTree(); + if (!level.bots_lowmem) + { + level.waypointsKDTree = WaypointsToKDTree(); + } level.waypointsCamp = []; level.waypointsTube = []; @@ -1840,6 +1843,27 @@ GetNearestWaypointWithSight(pos) return candidate; } +/* + Will linearly search for the nearest waypoint +*/ +GetNearestWaypoint(pos) +{ + candidate = undefined; + dist = 2147483647; + + for(i = 0; i < level.waypointCount; i++) + { + curdis = DistanceSquared(level.waypoints[i].origin, pos); + if(curdis > dist) + continue; + + dist = curdis; + candidate = level.waypoints[i]; + } + + return candidate; +} + /* Modified Pezbot astar search. This makes use of sets for quick look up and a heap for a priority queue instead of simple lists which require to linearly search for elements everytime. @@ -1853,7 +1877,11 @@ AStarSearch(start, goal, team, greedy_path) closed = [];//set for quick lookup - startwp = level.waypointsKDTree KDTreeNearest(start);//balanced kdtree, for nns + startwp = undefined; + if (level.bots_lowmem) + startwp = getNearestWaypoint(start); + else + startwp = level.waypointsKDTree KDTreeNearest(start);//balanced kdtree, for nns if(!isDefined(startwp)) return []; _startwp = undefined; @@ -1863,7 +1891,11 @@ AStarSearch(start, goal, team, greedy_path) startwp = _startwp; startwp = startwp.index; - goalwp = level.waypointsKDTree KDTreeNearest(goal); + goalwp = undefined; + if (level.bots_lowmem) + goalwp = getNearestWaypoint(goal); + else + goalwp = level.waypointsKDTree KDTreeNearest(goal); if(!isDefined(goalwp)) return []; _goalwp = undefined;