diff options
author | Max Horn | 2009-09-02 19:33:08 +0000 |
---|---|---|
committer | Max Horn | 2009-09-02 19:33:08 +0000 |
commit | 58f06b394f87d094ea1139f5098cac12044ea1ee (patch) | |
tree | 633a3c3e9b95e130eeee5e5c05ffa5f9ebb2ca09 /engines/saga | |
parent | 83dd2397691dec768a06dad7de2697d5f10dee50 (diff) | |
download | scummvm-rg350-58f06b394f87d094ea1139f5098cac12044ea1ee.tar.gz scummvm-rg350-58f06b394f87d094ea1139f5098cac12044ea1ee.tar.bz2 scummvm-rg350-58f06b394f87d094ea1139f5098cac12044ea1ee.zip |
SAGA: Change Actor::fillPathArray to use a dynamic queue instead of an only-growing array -> should reduce memory usage significantly
svn-id: r43912
Diffstat (limited to 'engines/saga')
-rw-r--r-- | engines/saga/actor_path.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
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<PathDirectionData> pathDirectionList; + Common::List<PathDirectionData> 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; |