From e14196e3fca9c8c38f286f3877be0c765e13bd2d Mon Sep 17 00:00:00 2001 From: ineedbots Date: Wed, 19 May 2021 20:07:04 -0600 Subject: [PATCH] Added low memory mode --- userraw/maps/mp/bots/_bot.gsc | 5 ++++ userraw/maps/mp/bots/_bot_utility.gsc | 38 ++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/userraw/maps/mp/bots/_bot.gsc b/userraw/maps/mp/bots/_bot.gsc index 27e74e4..d7e06cf 100644 --- a/userraw/maps/mp/bots/_bot.gsc +++ b/userraw/maps/mp/bots/_bot.gsc @@ -23,6 +23,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(); thread hook_callbacks(); diff --git a/userraw/maps/mp/bots/_bot_utility.gsc b/userraw/maps/mp/bots/_bot_utility.gsc index 93f1227..8028961 100644 --- a/userraw/maps/mp/bots/_bot_utility.gsc +++ b/userraw/maps/mp/bots/_bot_utility.gsc @@ -1116,7 +1116,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 = []; @@ -1885,6 +1888,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. @@ -1898,7 +1922,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; @@ -1908,7 +1936,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;