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:
parent
25286e9932
commit
72ecd9e20d
1 changed files with 44 additions and 20 deletions
|
@ -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,23 +65,21 @@ 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) 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue