Browse Source

Clean up LineClearF

pull/977/head
Anders Jenbo 5 years ago
parent
commit
a6af2690f0
  1. 19
      Source/monster.cpp

19
Source/monster.cpp

@ -5730,6 +5730,7 @@ BOOL LineClearF(BOOL (*Clear)(int, int), int x1, int y1, int x2, int y2)
int d; int d;
int xincD, yincD, dincD, dincH; int xincD, yincD, dincD, dincH;
int tmp; int tmp;
BOOL done = FALSE;
xorg = x1; xorg = x1;
yorg = y1; yorg = y1;
@ -5748,16 +5749,16 @@ BOOL LineClearF(BOOL (*Clear)(int, int), int x1, int y1, int x2, int y2)
} }
if (dy > 0) { if (dy > 0) {
d = 2 * dy - dx; d = 2 * dy - dx;
dincH = 2 * (dy - dx);
dincD = 2 * dy; dincD = 2 * dy;
dincH = 2 * (dy - dx);
yincD = 1; yincD = 1;
} else { } else {
d = 2 * dy + dx; d = 2 * dy + dx;
dincH = 2 * (dx + dy);
dincD = 2 * dy; dincD = 2 * dy;
dincH = 2 * (dx + dy);
yincD = -1; yincD = -1;
} }
while (x1 != x2 || y1 != y2) { while (!done && (x1 != x2 || y1 != y2)) {
if ((d <= 0) ^ (yincD < 0)) { if ((d <= 0) ^ (yincD < 0)) {
d += dincD; d += dincD;
} else { } else {
@ -5765,8 +5766,7 @@ BOOL LineClearF(BOOL (*Clear)(int, int), int x1, int y1, int x2, int y2)
y1 += yincD; y1 += yincD;
} }
x1++; x1++;
if ((x1 != xorg || y1 != yorg) && !Clear(x1, y1)) done = ((x1 != xorg || y1 != yorg) && !Clear(x1, y1));
break;
} }
} else { } else {
if (dy < 0) { if (dy < 0) {
@ -5781,16 +5781,16 @@ BOOL LineClearF(BOOL (*Clear)(int, int), int x1, int y1, int x2, int y2)
} }
if (dx > 0) { if (dx > 0) {
d = 2 * dx - dy; d = 2 * dx - dy;
dincH = 2 * (dx - dy);
dincD = 2 * dx; dincD = 2 * dx;
dincH = 2 * (dx - dy);
xincD = 1; xincD = 1;
} else { } else {
d = 2 * dx + dy; d = 2 * dx + dy;
dincH = 2 * (dy + dx);
dincD = 2 * dx; dincD = 2 * dx;
dincH = 2 * (dy + dx);
xincD = -1; xincD = -1;
} }
while (y1 != y2 || x1 != x2) { while (!done && (y1 != y2 || x1 != x2)) {
if ((d <= 0) ^ (xincD < 0)) { if ((d <= 0) ^ (xincD < 0)) {
d += dincD; d += dincD;
} else { } else {
@ -5798,8 +5798,7 @@ BOOL LineClearF(BOOL (*Clear)(int, int), int x1, int y1, int x2, int y2)
x1 += xincD; x1 += xincD;
} }
y1++; y1++;
if ((y1 != yorg || x1 != xorg) && !Clear(x1, y1)) done = ((y1 != yorg || x1 != xorg) && !Clear(x1, y1));
break;
} }
} }
return x1 == x2 && y1 == y2; return x1 == x2 && y1 == y2;

Loading…
Cancel
Save