fix #1269037 Rif walks off-screen when looking at screen at desk

svn-id: r18774
This commit is contained in:
Andrew Kurushin
2005-09-04 17:40:16 +00:00
parent 368785074c
commit 4e5cc8d080
3 changed files with 23 additions and 23 deletions
+2 -2
View File
@@ -1975,13 +1975,14 @@ bool Actor::actorWalkTo(uint16 actorId, const Location &toLocation) {
pointBest = actor->_walkStepsPoints[actor->_walkStepsCount - 1];
pointBest.x &= ~1;
delta.x = ABS(pointFrom.x - pointTo.x);
delta.y = ABS(pointFrom.y - pointTo.y);
bestDelta.x = ABS(pointBest.x - pointTo.x);
bestDelta.y = ABS(pointBest.y - pointTo.y);
if (delta.x + delta.y <= bestDelta.x + bestDelta.y && (actor->_flags & kFollower)) {
if ((delta.x + delta.y <= bestDelta.x + bestDelta.y) && (actor->_flags & kFollower)) {
actor->_actorFlags |= kActorNoFollow;
}
@@ -2542,7 +2543,6 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be
bestRating = currentRating;
bestPath = nextPoint;
}
pathDirection = &_pathDirectionList[i];
}
++i;
} while (i < _pathDirectionListCount);
+1 -1
View File
@@ -752,7 +752,7 @@ public:
inline int16 quickDistance(const Point &point1, const Point &point2) {
Point delta;
delta.x = ABS(point1.x - point2.x);
delta.x = ABS(point1.x - point2.x) / 2;
delta.y = ABS(point1.y - point2.y);
return ((delta.x < delta.y) ? (delta.y + delta.x / 2) : (delta.x + delta.y / 2));
}
+20 -20
View File
@@ -1416,40 +1416,40 @@ void IsoMap::findDragonTilePath(ActorData* actor,const Location &start, const Lo
switch (tilePoint->direction) {
case kDirUpRight:
if (checkDragonPoint( tilePoint->u + 1, tilePoint->v + 0, 1)) {
pushDragonPoint( tilePoint->u + 2, tilePoint->v + 0, 1);
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, 7);
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, 3);
if (checkDragonPoint( tilePoint->u + 1, tilePoint->v + 0, kDirUpRight)) {
pushDragonPoint( tilePoint->u + 2, tilePoint->v + 0, kDirUpRight);
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, kDirUpLeft);
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, kDirDownRight);
}
break;
case kDirDownRight:
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v - 1, 3)) {
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 2, 3);
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, 1);
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, 5);
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v - 1, kDirDownRight)) {
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 2, kDirDownRight);
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, kDirUpRight);
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, kDirDownLeft);
}
break;
case kDirDownLeft:
if (checkDragonPoint( tilePoint->u - 1, tilePoint->v + 0, 5)) {
pushDragonPoint( tilePoint->u - 2, tilePoint->v + 0, 5);
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, 3);
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, 7);
if (checkDragonPoint( tilePoint->u - 1, tilePoint->v + 0, kDirDownLeft)) {
pushDragonPoint( tilePoint->u - 2, tilePoint->v + 0, kDirDownLeft);
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, kDirDownRight);
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, kDirUpLeft);
}
break;
case kDirUpLeft:
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v + 1, 7)) {
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 2, 7);
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, 5);
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, 1);
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v + 1, kDirUpLeft)) {
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 2, kDirUpLeft);
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, kDirDownLeft);
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, kDirUpRight);
}
break;
}
if (first && (_queueCount == _readCount)) {
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 0, 1);
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 1, 3);
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 0, 5);
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 1, 7);
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 0, kDirUpRight);
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 1, kDirDownRight);
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 0, kDirDownLeft);
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 1, kDirUpLeft);
}
first = false;
}