[Scummvm-cvs-logs] SF.net SVN: scummvm: [28183] scummvm/trunk/engines/touche/touche.cpp
cyx at users.sourceforge.net
cyx at users.sourceforge.net
Tue Jul 24 11:50:24 CEST 2007
Revision: 28183
http://scummvm.svn.sourceforge.net/scummvm/?rev=28183&view=rev
Author: cyx
Date: 2007-07-24 02:50:24 -0700 (Tue, 24 Jul 2007)
Log Message:
-----------
fixed some issues in pathfinding code
Modified Paths:
--------------
scummvm/trunk/engines/touche/touche.cpp
Modified: scummvm/trunk/engines/touche/touche.cpp
===================================================================
--- scummvm/trunk/engines/touche/touche.cpp 2007-07-24 06:36:10 UTC (rev 28182)
+++ scummvm/trunk/engines/touche/touche.cpp 2007-07-24 09:50:24 UTC (rev 28183)
@@ -2704,6 +2704,7 @@
const int md1 = _programWalkTable[i].point1;
const int md2 = _programWalkTable[i].point2;
if ((md1 & 0x4000) == 0) {
+ assert((md2 & 0x4000) == 0);
if (_programPointsTable[md1].priority == priority - 1 && _programPointsTable[md2].priority > priority) {
_programPointsTable[md2].priority = priority;
quit = false;
@@ -2949,6 +2950,7 @@
int16 md1 = _programWalkTable[i].point1;
int16 md2 = _programWalkTable[i].point2;
if ((md1 & 0x4000) == 0) {
+ assert((md2 & 0x4000) == 0);
if (_programPointsTable[md1].priority != 0 && _programPointsTable[md2].priority == 0) {
_programPointsTable[md2].priority = 1;
quit = false;
@@ -2974,8 +2976,8 @@
int minPointsDataNum = -1;
for (uint i = 1; i < _programPointsTable.size(); ++i) {
if (_programPointsTable[i].priority != 0) {
- int dx = ABS<int>(_programPointsTable[i].x - dstPosX);
- int dy = ABS<int>(_programPointsTable[i].y - dstPosY);
+ int dx = _programPointsTable[i].x - dstPosX;
+ int dy = _programPointsTable[i].y - dstPosY;
int distance = dx * dx + dy * dy;
if (distance < minDistance) {
minDistance = distance;
@@ -2997,23 +2999,23 @@
int dy = pts2->y - pts1->y;
if (dx == 0) {
if (dstPosY > MIN(pts2->y, pts1->y) && dstPosY < MAX(pts2->y, pts1->y)) {
- distance = ABS(dstPosX - pts1->x);
- if (distance <= 100) {
- distance *= distance;
+ int d = ABS(dstPosX - pts1->x);
+ if (d <= 100) {
+ distance = d * d;
}
}
} else if (dy == 0) {
if (dstPosX > MIN(pts2->x, pts1->x) && dstPosX < MAX(pts2->x, pts1->x)) {
- distance = ABS(dstPosY - pts1->y);
- if (distance <= 100) {
- distance *= distance;
+ int d = ABS(dstPosY - pts1->y);
+ if (d <= 100) {
+ distance = d * d;
}
}
} else {
if (dstPosY > MIN(pts2->y, pts1->y) && dstPosY < MAX(pts2->y, pts1->y) &&
dstPosX > MIN(pts2->x, pts1->x) && dstPosX < MAX(pts2->x, pts1->x) ) {
- distance = (dstPosY - pts1->y) * dx - (dstPosX - pts1->x) * dy;
- distance = (dx * dx + dy * dy) / distance;
+ distance = (dstPosX - pts1->x) * dy - (dstPosY - pts1->y) * dx;
+ distance /= (dx * dx + dy * dy);
}
}
if (distance < minDistance) {
@@ -3047,13 +3049,13 @@
dstPosZ = pts2->z - (pts2->x - dstPosX) * dz / dx;
dstPosY = pts2->y - (pts2->x - dstPosX) * dy / dx;
}
- if (key->walkDataNum == key->prevWalkDataNum && key->walkPointsList[1] == -1) {
- if (key->walkPointsList[0] == _programWalkTable[minWalkDataNum].point1 || key->walkPointsList[0] == _programWalkTable[minWalkDataNum].point2) {
- ++key->walkPointsListCount;
- }
+ }
+ key->prevWalkDataNum = minWalkDataNum;
+ if (key->walkDataNum == key->prevWalkDataNum && key->walkPointsList[1] == -1) {
+ if (key->walkPointsList[0] == _programWalkTable[minWalkDataNum].point1 || key->walkPointsList[0] == _programWalkTable[minWalkDataNum].point2) {
+ ++key->walkPointsListCount;
}
}
- key->prevWalkDataNum = minWalkDataNum;
key->xPosPrev = dstPosX;
key->yPosPrev = dstPosY;
key->zPosPrev = dstPosZ;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list