Merged o_pathfind() into o1_getPathPosn().

svn-id: r21757
This commit is contained in:
Torbjörn Andersson 2006-04-10 08:34:16 +00:00
parent 1d9cd5ad7d
commit 7ab84e4d99
3 changed files with 51 additions and 55 deletions

View file

@ -1475,11 +1475,57 @@ void SimonEngine::o1_screenTextPObj() {
void SimonEngine::o1_getPathPosn() { void SimonEngine::o1_getPathPosn() {
// 178: path find // 178: path find
uint a = getVarOrWord(); uint x = getVarOrWord();
uint b = getVarOrWord(); uint y = getVarOrWord();
uint c = getVarOrByte(); uint var_1 = getVarOrByte();
uint d = getVarOrByte(); uint var_2 = getVarOrByte();
o_pathfind(a, b, c, d);
const uint16 *p;
uint i, j;
uint prev_i;
uint x_diff, y_diff;
uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF;
if (getGameType() == GType_FF) {
x += _scrollX;
y += _scrollY;
}
if (getGameType() == GType_SIMON2) {
x += _scrollX * 8;
}
int end = (getGameType() == GType_FF) ? 9999 : 999;
prev_i = 21 - _variableArray[12];
for (i = 20; i != 0; --i) {
p = (const uint16 *)_pathFindArray[20 - i];
if (!p)
continue;
for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {
x_diff = abs((int)(readUint16Wrapper(&p[0]) - x));
y_diff = abs((int)(readUint16Wrapper(&p[1]) - 12 - y));
if (x_diff < y_diff) {
x_diff /= 4;
y_diff *= 4;
}
x_diff += y_diff /= 4;
if (x_diff < best_dist || x_diff == best_dist && prev_i == i) {
best_dist = x_diff;
best_i = 21 - i;
best_j = j;
}
}
}
if (getGameType() == GType_FF && getBitFlag(83)) {
_variableArray[var_1] = best_i;
_variableArray[var_2] = best_j;
} else {
_variableArray[var_1] = best_i;
_variableArray[var_2] = best_j;
}
} }
void SimonEngine::o1_scnTxtLongText() { void SimonEngine::o1_scnTxtLongText() {

View file

@ -2941,55 +2941,6 @@ uint SimonEngine::itemPtrToID(Item *id) {
return 0; return 0;
} }
void SimonEngine::o_pathfind(int x, int y, uint var_1, uint var_2) {
const uint16 *p;
uint i, j;
uint prev_i;
uint x_diff, y_diff;
uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF;
if (getGameType() == GType_FF) {
x += _scrollX;
y += _scrollY;
}
if (getGameType() == GType_SIMON2) {
x += _scrollX * 8;
}
int end = (getGameType() == GType_FF) ? 9999 : 999;
prev_i = 21 - _variableArray[12];
for (i = 20; i != 0; --i) {
p = (const uint16 *)_pathFindArray[20 - i];
if (!p)
continue;
for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {
x_diff = abs((int)(readUint16Wrapper(&p[0]) - x));
y_diff = abs((int)(readUint16Wrapper(&p[1]) - 12 - y));
if (x_diff < y_diff) {
x_diff /= 4;
y_diff *= 4;
}
x_diff += y_diff /= 4;
if (x_diff < best_dist || x_diff == best_dist && prev_i == i) {
best_dist = x_diff;
best_i = 21 - i;
best_j = j;
}
}
}
if (getGameType() == GType_FF && getBitFlag(83)) {
_variableArray[var_1] = best_i;
_variableArray[var_2] = best_j;
} else {
_variableArray[var_1] = best_i;
_variableArray[var_2] = best_j;
}
}
void SimonEngine::delete_hitarea_by_index(uint index) { void SimonEngine::delete_hitarea_by_index(uint index) {
CHECK_BOUNDS(index, _hitAreas); CHECK_BOUNDS(index, _hitAreas);
_hitAreas[index].flags = 0; _hitAreas[index].flags = 0;

View file

@ -579,7 +579,6 @@ protected:
uint getOffsetOfChild2Param(SubObject *child, uint prop); uint getOffsetOfChild2Param(SubObject *child, uint prop);
void o_setTextColor(uint color); void o_setTextColor(uint color);
void o_pathfind(int x, int y, uint var_1, uint var_2);
void o_mouseOn(); void o_mouseOn();
void o_mouseOff(); void o_mouseOff();
void o_unfreezeBottom(); void o_unfreezeBottom();