diff options
| -rw-r--r-- | path.c | 16 | ||||
| -rw-r--r-- | path.h | 2 |
2 files changed, 18 insertions, 0 deletions
@@ -258,6 +258,22 @@ size_t diagonal_distance(Position a, Position b) { return (size_t) hypot(one, two); } +size_t path_length(Path path, Position start, Position goal) { + size_t length = 0; + if (path != NULL) { + Position cur = goal; + while (cur.x != start.x || cur.y != start.y) { + if (cur.x - path[cur.y][cur.x].parent.x == 0 || cur.y - path[cur.y][cur.x].parent.y == 0) { + length += COST_ORTHOGONAL; + } else { + length += COST_DIAGONAL; + } + cur = path[cur.y][cur.x].parent; + } + } + return length; +} + void path_free(Path path, size_t height) { if (path == NULL) return; for (size_t i = 0; i < height; i++) { @@ -14,6 +14,8 @@ size_t diagonal_distance(Position a, Position b); void path_free(Path path, size_t height); +size_t path_length(Path path, Position start, Position goal); + /* Helper funcs for the visited array */ char **visited_new(size_t width, size_t height); void visited_clear(char **visited, size_t width, size_t height); |
