- SquareDelta get_direction(Square orig, Square dest) {
-
- const SquareDelta directions[] = {
- DELTA_E, DELTA_N, DELTA_NE, DELTA_NW, DELTA_W, DELTA_S, DELTA_SW, DELTA_SE
- };
-
- for (int idx = 0; idx < 8; idx++)
- {
- Square from = orig;
- Square to = from + directions[idx];
-
- while (to != dest && square_distance(to, from) == 1 && square_is_ok(to))
- {
- from = to;
- to += directions[idx];
- }
-
- if (to == dest && square_distance(from, to) == 1)
- return directions[idx];
- }
- return DELTA_NONE;
- }
-
- void init_direction_table() {
-
- for (Square s1 = SQ_A1; s1 <= SQ_H8; s1++)
- for (Square s2 = SQ_A1; s2 <= SQ_H8; s2++)
- DirectionTable[s1][s2] = uint8_t(get_direction(s1, s2));
- }
-