Another tweak to the solver to make it handle blank tiles correctly.

The previous checkin stopped it choking on them, but it didn't
actually manage to _deduce_ that all the edges bordering them had to
be closed. Now it does better.

[originally from svn r5829]
This commit is contained in:
Simon Tatham
2005-05-22 12:14:39 +00:00
parent 0066cdd62a
commit ba3247bb92

13
net.c
View File

@ -694,7 +694,6 @@ static int net_solver(int w, int h, unsigned char *tiles,
assert(j > 0); /* we can't lose _all_ possibilities! */ assert(j > 0); /* we can't lose _all_ possibilities! */
if (j < i) { if (j < i) {
int a, o;
done_something = TRUE; done_something = TRUE;
/* /*
@ -703,12 +702,16 @@ static int net_solver(int w, int h, unsigned char *tiles,
*/ */
while (j < 4) while (j < 4)
tilestate[(y*w+x) * 4 + j++] = 255; tilestate[(y*w+x) * 4 + j++] = 255;
}
/* /*
* Now go through them again and see if we've * Now go through the tile orientations again and see
* deduced anything new about any edges. * if we've deduced anything new about any edges.
*/ */
{
int a, o;
a = 0xF; o = 0; a = 0xF; o = 0;
for (i = 0; i < 4 && tilestate[(y*w+x) * 4 + i] != 255; i++) { for (i = 0; i < 4 && tilestate[(y*w+x) * 4 + i] != 255; i++) {
a &= tilestate[(y*w+x) * 4 + i]; a &= tilestate[(y*w+x) * 4 + i];
o |= tilestate[(y*w+x) * 4 + i]; o |= tilestate[(y*w+x) * 4 + i];