aboutsummaryrefslogtreecommitdiff
path: root/engines/gnap/grid.cpp
diff options
context:
space:
mode:
authorStrangerke2016-05-04 07:13:48 +0200
committerEugene Sandulenko2016-05-10 12:14:49 +0200
commit2e50019c05dbff0bbb559b72a201630605505c87 (patch)
tree473fb2794fd1a783ac5015f2de4456c12642cd12 /engines/gnap/grid.cpp
parentaee38421631479b6025585649172491f3251ce5e (diff)
downloadscummvm-rg350-2e50019c05dbff0bbb559b72a201630605505c87.tar.gz
scummvm-rg350-2e50019c05dbff0bbb559b72a201630605505c87.tar.bz2
scummvm-rg350-2e50019c05dbff0bbb559b72a201630605505c87.zip
GNAP: Introduce Character class - WIP
Diffstat (limited to 'engines/gnap/grid.cpp')
-rw-r--r--engines/gnap/grid.cpp78
1 files changed, 41 insertions, 37 deletions
diff --git a/engines/gnap/grid.cpp b/engines/gnap/grid.cpp
index dfdc52811a..ec90cf1e8a 100644
--- a/engines/gnap/grid.cpp
+++ b/engines/gnap/grid.cpp
@@ -73,7 +73,7 @@ bool GnapEngine::isPointBlocked(int gridX, int gridY) {
if (gridX < 0 || gridX >= _gridMaxX || gridY < 0 || gridY >= _gridMaxY)
return true;
- if ((gridX == _gnapX && gridY == _gnapY) || (gridX == _platX && gridY == _platY))
+ if ((_gnap->_pos == Common::Point(gridX, gridY)) || (gridX == _platX && gridY == _platY))
return true;
const int x = _gridMinX + 75 * gridX;
@@ -537,8 +537,11 @@ bool GnapEngine::gnapFindPath3(int gridX, int gridY) {
return done;
}
-bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequenceId, int flags) {
+bool GnapEngine::gnapWalkTo(Common::Point gridPos, int animationIndex, int sequenceId, int flags) {
+ return gnapWalkTo(gridPos.x, gridPos.y, animationIndex, sequenceId, flags);
+}
+bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequenceId, int flags) {
int datNum = flags & 3;
bool done = false;
@@ -557,16 +560,17 @@ bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequen
if (animationIndex >= 0 && _gnapWalkDestX == _platX && _gnapWalkDestY == _platY)
platypusMakeRoom();
- if (gridSub41F5FC(_gnapX, _gnapY, 0))
+ // TODO: Simplify the cascade of Ifs
+ if (gridSub41F5FC(_gnap->_pos.x, _gnap->_pos.y, 0))
done = true;
- if (!done && gridSub41FAD5(_gnapX, _gnapY, 0))
+ if (!done && gridSub41FAD5(_gnap->_pos.x, _gnap->_pos.y, 0))
done = true;
- if (!done && gnapFindPath3(_gnapX, _gnapY))
+ if (!done && gnapFindPath3(_gnap->_pos.x, _gnap->_pos.y))
done = true;
- if (!done && gridSub41F08B(_gnapX, _gnapY))
+ if (!done && gridSub41F08B(_gnap->_pos.x, _gnap->_pos.y))
done = true;
gnapIdle();
@@ -627,7 +631,7 @@ bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequen
if (_gnapWalkNodesCount > 0) {
_gnapSequenceId = gnapSequenceId;
_gnapId = gnapId;
- _gnapIdleFacing = getGnapWalkFacing(_gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaX, _gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaY);
+ _gnap->_idleFacing = getGnapWalkFacing(_gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaX, _gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaY);
_gnapSequenceDatNum = datNum;
if (animationIndex >= 0)
_gameSys->setAnimation(makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, animationIndex);
@@ -640,26 +644,26 @@ bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequen
_gnapSequenceId = ridToEntryIndex(sequenceId);
_gnapSequenceDatNum = ridToDatIndex(sequenceId);
if (_gnapSequenceId == 0x7B9) {
- _gnapIdleFacing = kDirBottomRight;
+ _gnap->_idleFacing = kDirBottomRight;
} else {
switch (_gnapSequenceId) {
case 0x7BA:
- _gnapIdleFacing = kDirBottomLeft;
+ _gnap->_idleFacing = kDirBottomLeft;
break;
case 0x7BB:
- _gnapIdleFacing = kDirUpRight;
+ _gnap->_idleFacing = kDirUpRight;
break;
case 0x7BC:
- _gnapIdleFacing = kDirUpLeft;
+ _gnap->_idleFacing = kDirUpLeft;
break;
}
}
} else {
if (_gnapWalkNodesCount > 0) {
_gnapSequenceId = getGnapWalkStopSequenceId(_gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaX, _gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaY);
- _gnapIdleFacing = getGnapWalkFacing(_gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaX, _gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaY);
+ _gnap->_idleFacing = getGnapWalkFacing(_gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaX, _gnapWalkNodes[_gnapWalkNodesCount - 1]._deltaY);
} else if (gridX >= 0 || gridY >= 0) {
- switch (_gnapIdleFacing) {
+ switch (_gnap->_idleFacing) {
case kDirBottomRight:
_gnapSequenceId = 0x7B9;
break;
@@ -674,14 +678,15 @@ bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequen
break;
}
} else {
- int v10 = _leftClickMouseX - (_gridMinX + 75 * _gnapX);
- int v11 = _leftClickMouseY - (_gridMinY + 48 * _gnapY);
- if (_leftClickMouseX == _gridMinX + 75 * _gnapX)
+ //TODO: simplify the checks by using v10 and v11
+ int v10 = _leftClickMouseX - (_gridMinX + 75 * _gnap->_pos.x);
+ int v11 = _leftClickMouseY - (_gridMinY + 48 * _gnap->_pos.y);
+ if (_leftClickMouseX == _gridMinX + 75 * _gnap->_pos.x)
++v10;
- if (_leftClickMouseY == _gridMinY + 48 * _gnapY)
+ if (_leftClickMouseY == _gridMinY + 48 * _gnap->_pos.y)
v11 = 1;
_gnapSequenceId = getGnapWalkStopSequenceId(v10 / abs(v10), v11 / abs(v11));
- _gnapIdleFacing = getGnapWalkFacing(v10 / abs(v10), v11 / abs(v11));
+ _gnap->_idleFacing = getGnapWalkFacing(v10 / abs(v10), v11 / abs(v11));
}
_gnapSequenceDatNum = datNum;
}
@@ -704,8 +709,7 @@ bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequen
}
}
- _gnapX = _gnapWalkDestX;
- _gnapY = _gnapWalkDestY;
+ _gnap->_pos = Common::Point(_gnapWalkDestX, _gnapWalkDestY);
return done;
}
@@ -714,22 +718,22 @@ void GnapEngine::gnapWalkStep() {
bool done = false;
for (int i = 1; i < _gridMaxX && !done; ++i) {
done = true;
- if (!isPointBlocked(_gnapX + i, _gnapY))
- gnapWalkTo(_gnapX + i, _gnapY, -1, -1, 1);
- else if (!isPointBlocked(_gnapX - i, _gnapY))
- gnapWalkTo(_gnapX - i, _gnapY, -1, -1, 1);
- else if (!isPointBlocked(_gnapX, _gnapY + 1))
- gnapWalkTo(_gnapX, _gnapY + 1, -1, -1, 1);
- else if (!isPointBlocked(_gnapX, _gnapY - 1))
- gnapWalkTo(_gnapX, _gnapY - 1, -1, -1, 1);
- else if (!isPointBlocked(_gnapX + 1, _gnapY + 1))
- gnapWalkTo(_gnapX + 1, _gnapY + 1, -1, -1, 1);
- else if (!isPointBlocked(_gnapX - 1, _gnapY + 1))
- gnapWalkTo(_gnapX - 1, _gnapY + 1, -1, -1, 1);
- else if (!isPointBlocked(_gnapX + 1, _gnapY - 1))
- gnapWalkTo(_gnapX + 1, _gnapY - 1, -1, -1, 1);
- else if (!isPointBlocked(_gnapX - 1, _gnapY - 1))
- gnapWalkTo(_gnapX - 1, _gnapY - 1, -1, -1, 1);
+ if (!isPointBlocked(_gnap->_pos.x + i, _gnap->_pos.y))
+ gnapWalkTo(_gnap->_pos.x + i, _gnap->_pos.y, -1, -1, 1);
+ else if (!isPointBlocked(_gnap->_pos.x - i, _gnap->_pos.y))
+ gnapWalkTo(_gnap->_pos.x - i, _gnap->_pos.y, -1, -1, 1);
+ else if (!isPointBlocked(_gnap->_pos.x, _gnap->_pos.y + 1))
+ gnapWalkTo(_gnap->_pos.x, _gnap->_pos.y + 1, -1, -1, 1);
+ else if (!isPointBlocked(_gnap->_pos.x, _gnap->_pos.y - 1))
+ gnapWalkTo(_gnap->_pos.x, _gnap->_pos.y - 1, -1, -1, 1);
+ else if (!isPointBlocked(_gnap->_pos.x + 1, _gnap->_pos.y + 1))
+ gnapWalkTo(_gnap->_pos.x + 1, _gnap->_pos.y + 1, -1, -1, 1);
+ else if (!isPointBlocked(_gnap->_pos.x - 1, _gnap->_pos.y + 1))
+ gnapWalkTo(_gnap->_pos.x - 1, _gnap->_pos.y + 1, -1, -1, 1);
+ else if (!isPointBlocked(_gnap->_pos.x + 1, _gnap->_pos.y - 1))
+ gnapWalkTo(_gnap->_pos.x + 1, _gnap->_pos.y - 1, -1, -1, 1);
+ else if (!isPointBlocked(_gnap->_pos.x - 1, _gnap->_pos.y - 1))
+ gnapWalkTo(_gnap->_pos.x - 1, _gnap->_pos.y - 1, -1, -1, 1);
else
done = false;
}
@@ -1210,7 +1214,7 @@ bool GnapEngine::platypusWalkTo(int gridX, int gridY, int animationIndex, int se
_platWalkDestX = CLIP(gridX, 0, _gridMaxX - 1);
_platWalkDestY = CLIP(gridY, 0, _gridMaxY - 1);
- if (animationIndex >= 0 && _platWalkDestX == _gnapX && _platWalkDestY == _gnapY)
+ if (animationIndex >= 0 && _gnap->_pos == Common::Point(_platWalkDestX, _platWalkDestY))
gnapWalkStep();
if (gridSub423CC1(_platX, _platY, 0))