aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/scene_data.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2014-03-29 17:12:12 -0400
committerPaul Gilbert2014-03-29 17:12:12 -0400
commitf3db90b646d4af5b6daf43d11e99d59de0649b03 (patch)
tree07491eed952a9fb2269a697e5b3cbf5fd7fbc0d6 /engines/mads/scene_data.cpp
parent5f3a15022584c3eb7377291a278165a1b1b8dd7b (diff)
downloadscummvm-rg350-f3db90b646d4af5b6daf43d11e99d59de0649b03.tar.gz
scummvm-rg350-f3db90b646d4af5b6daf43d11e99d59de0649b03.tar.bz2
scummvm-rg350-f3db90b646d4af5b6daf43d11e99d59de0649b03.zip
MADS: Refactored pathfinder into it's own class
Diffstat (limited to 'engines/mads/scene_data.cpp')
-rw-r--r--engines/mads/scene_data.cpp92
1 files changed, 1 insertions, 91 deletions
diff --git a/engines/mads/scene_data.cpp b/engines/mads/scene_data.cpp
index 5b5c47f402..abe0b7bf21 100644
--- a/engines/mads/scene_data.cpp
+++ b/engines/mads/scene_data.cpp
@@ -30,15 +30,6 @@
namespace MADS {
-void SceneNode::load(Common::SeekableReadStream *f) {
- _walkPos.x = f->readSint16LE();
- _walkPos.y = f->readSint16LE();
- for (int i = 0; i < MAX_ROUTE_NODES; ++i)
- _indexes[i] = f->readUint16LE();
-}
-
-/*------------------------------------------------------------------------*/
-
KernelMessage::KernelMessage() {
_flags = 0;
_sequenceIndex = 0;
@@ -97,87 +88,6 @@ void SceneInfo::SpriteInfo::load(Common::SeekableReadStream *f) {
_scale = f->readByte();
}
-void SceneInfo::setRouteNode(int nodeIndex, const Common::Point &pt, MSurface &depthSurface) {
- int flags, hypotenuse;
-
- _nodes[nodeIndex]._walkPos = pt;
-
- // Recalculate inter-node lengths
- for (uint idx = 0; idx < _nodes.size(); ++idx) {
- int entry;
- if (idx == (uint)nodeIndex) {
- entry = 0x3FFF;
- }
- else {
- // Process the node
- flags = getRouteFlags(pt, _nodes[idx]._walkPos, depthSurface);
-
- int xDiff = ABS(_nodes[idx]._walkPos.x - pt.x);
- int yDiff = ABS(_nodes[idx]._walkPos.y - pt.y);
- hypotenuse = sqrt((double)(xDiff * xDiff + yDiff * yDiff));
-
- if (hypotenuse >= 0x3FFF)
- // Shouldn't ever be this large
- hypotenuse = 0x3FFF;
-
- entry = hypotenuse | flags;
- _nodes[idx]._indexes[nodeIndex] = entry;
- _nodes[nodeIndex]._indexes[idx] = entry;
- }
- }
-}
-
-int SceneInfo::getRouteFlags(const Common::Point &src, const Common::Point &dest,
- MSurface &depthSurface) {
- int result = 0x8000;
- bool flag = false;
-
- int xDiff = ABS(dest.x - src.x);
- int yDiff = ABS(dest.y - src.y);
- int xDirection = dest.x >= src.x ? 1 : -1;
- int yDirection = dest.y >= src.y ? depthSurface.w : -depthSurface.w;
- int majorDiff = 0;
- if (dest.x < src.x)
- majorDiff = MAX(xDiff, yDiff);
- ++xDiff;
- ++yDiff;
-
- byte *srcP = depthSurface.getBasePtr(src.x, src.y);
-
- int totalCtr = majorDiff;
- for (int xCtr = 0; xCtr < xDiff; ++xCtr, srcP += xDirection) {
- totalCtr += yDiff;
-
- if ((*srcP & 0x80) == 0)
- flag = false;
- else if (!flag) {
- flag = true;
- result -= 0x4000;
- if (result == 0)
- break;
- }
-
- while (totalCtr >= xDiff) {
- totalCtr -= xDiff;
-
- if ((*srcP & 0x80) == 0)
- flag = false;
- else if (!flag) {
- flag = true;
- result -= 0x4000;
- if (result == 0)
- break;
- }
-
- srcP += yDirection;
- }
- if (result == 0)
- break;
- }
-
- return result;
-}
-
/*------------------------------------------------------------------------*/
SceneInfo *SceneInfo::init(MADSEngine *vm) {
@@ -225,7 +135,7 @@ void SceneInfo::load(int sceneId, int v1, const Common::String &resName,
// Load the set of objects that are associated with the scene
for (int i = 0; i < 20; ++i) {
- SceneNode node;
+ WalkNode node;
node.load(infoStream);
if (i < nodeCount)