From 58f06b394f87d094ea1139f5098cac12044ea1ee Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 2 Sep 2009 19:33:08 +0000 Subject: SAGA: Change Actor::fillPathArray to use a dynamic queue instead of an only-growing array -> should reduce memory usage significantly svn-id: r43912 --- engines/saga/actor_path.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'engines/saga/actor_path.cpp') diff --git a/engines/saga/actor_path.cpp b/engines/saga/actor_path.cpp index 992a52f881..6f1fc2f2d4 100644 --- a/engines/saga/actor_path.cpp +++ b/engines/saga/actor_path.cpp @@ -232,7 +232,7 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be int directionCount; int16 compressX = (_vm->getGameId() == GID_ITE) ? 2 : 1; - Common::Array pathDirectionList; + Common::List pathDirectionQueue; pointCounter = 0; bestRating = quickDistance(fromPoint, toPoint, compressX); @@ -240,7 +240,7 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be for (startDirection = 0; startDirection < 4; startDirection++) { PathDirectionData tmp = { startDirection, fromPoint.x, fromPoint.y }; - pathDirectionList.push_back(tmp); + pathDirectionQueue.push_back(tmp); } if (validPathCellPoint(fromPoint)) { @@ -251,10 +251,12 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be #endif } - for (uint i = 0; i < pathDirectionList.size(); ++i) { + while (!pathDirectionQueue.empty()) { + PathDirectionData curPathDirection = pathDirectionQueue.front(); + pathDirectionQueue.pop_front(); for (directionCount = 0; directionCount < 3; directionCount++) { - samplePathDirection = &pathDirectionLUT[pathDirectionList[i].direction][directionCount]; - nextPoint = Point(pathDirectionList[i].x, pathDirectionList[i].y); + samplePathDirection = &pathDirectionLUT[curPathDirection.direction][directionCount]; + nextPoint = Point(curPathDirection.x, curPathDirection.y); nextPoint.x += samplePathDirection->x; nextPoint.y += samplePathDirection->y; @@ -274,7 +276,7 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be PathDirectionData tmp = { samplePathDirection->direction, nextPoint.x, nextPoint.y }; - pathDirectionList.push_back(tmp); + pathDirectionQueue.push_back(tmp); ++pointCounter; if (nextPoint == toPoint) { bestPoint = toPoint; -- cgit v1.2.3