aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/actor_path.cpp
diff options
context:
space:
mode:
authorMax Horn2009-09-02 19:33:08 +0000
committerMax Horn2009-09-02 19:33:08 +0000
commit58f06b394f87d094ea1139f5098cac12044ea1ee (patch)
tree633a3c3e9b95e130eeee5e5c05ffa5f9ebb2ca09 /engines/saga/actor_path.cpp
parent83dd2397691dec768a06dad7de2697d5f10dee50 (diff)
downloadscummvm-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/actor_path.cpp')
-rw-r--r--engines/saga/actor_path.cpp14
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;