1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-12 03:59:15 +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,21 +65,19 @@ 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 s1 = SQ_A1; s1 <= SQ_H8; s1++)
for(Square s2 = SQ_A1; s2 <= SQ_H8; s2++) { 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) continue; if (s1 == s2)
for(SignedDirection d = SIGNED_DIR_E; d <= SIGNED_DIR_SE; d++) { continue;
SquareDelta delta = deltas[d];
Square s3, s4; for (SignedDirection d = SIGNED_DIR_E; d != SIGNED_DIR_NONE; d++)
for(s4 = s1 + delta, s3 = s1; {
square_distance(s4, s3) == 1 && s4 != s2 && square_is_ok(s4); if (reachable(s1, s2, d))
s3 = s4, s4 += delta); {
if(s4 == s2 && square_distance(s4, s3) == 1) {
SignedDirectionTable[s1][s2] = uint8_t(d); SignedDirectionTable[s1][s2] = uint8_t(d);
DirectionTable[s1][s2] = uint8_t(d / 2); DirectionTable[s1][s2] = uint8_t(d / 2);
break; break;