1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Space inflate and cleanup direction.cpp

Hopefully it is now more clear what's happening here.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2009-05-20 12:02:39 +02:00
parent 25286e9932
commit 72ecd9e20d

View file

@ -26,6 +26,32 @@
#include "square.h" #include "square.h"
////
//// Local definitions
////
namespace {
const SquareDelta directionToDelta[] = {
DELTA_E, DELTA_W, DELTA_N, DELTA_S, DELTA_NE, DELTA_SW, DELTA_NW, DELTA_SE
};
bool reachable(Square orig, Square dest, SignedDirection dir) {
SquareDelta delta = directionToDelta[dir];
Square from = orig;
Square to = from + delta;
while (to != dest && square_distance(to, from) == 1 && square_is_ok(to))
{
from = to;
to += delta;
}
return (to == dest && square_distance(from, to) == 1);
}
}
//// ////
//// Variables //// Variables
//// ////
@ -39,25 +65,23 @@ uint8_t SignedDirectionTable[64][64];
//// ////
void init_direction_table() { void init_direction_table() {
SquareDelta deltas[8] = {
DELTA_E, DELTA_W, DELTA_N, DELTA_S, DELTA_NE, DELTA_SW, DELTA_NW, DELTA_SE for (Square s1 = SQ_A1; s1 <= SQ_H8; s1++)
}; for (Square s2 = SQ_A1; s2 <= SQ_H8; s2++)
for(Square s1 = SQ_A1; s1 <= SQ_H8; s1++) {
for(Square s2 = SQ_A1; s2 <= SQ_H8; s2++) { DirectionTable[s1][s2] = uint8_t(DIR_NONE);
DirectionTable[s1][s2] = uint8_t(DIR_NONE); SignedDirectionTable[s1][s2] = uint8_t(SIGNED_DIR_NONE);
SignedDirectionTable[s1][s2] = uint8_t(SIGNED_DIR_NONE); if (s1 == s2)
if(s1 == s2) continue; continue;
for(SignedDirection d = SIGNED_DIR_E; d <= SIGNED_DIR_SE; d++) {
SquareDelta delta = deltas[d]; for (SignedDirection d = SIGNED_DIR_E; d != SIGNED_DIR_NONE; d++)
Square s3, s4; {
for(s4 = s1 + delta, s3 = s1; if (reachable(s1, s2, d))
square_distance(s4, s3) == 1 && s4 != s2 && square_is_ok(s4); {
s3 = s4, s4 += delta); SignedDirectionTable[s1][s2] = uint8_t(d);
if(s4 == s2 && square_distance(s4, s3) == 1) { DirectionTable[s1][s2] = uint8_t(d / 2);
SignedDirectionTable[s1][s2] = uint8_t(d); break;
DirectionTable[s1][s2] = uint8_t(d/2); }
break; }
}
} }
}
} }