#pragma once #include "point.hpp" #include "matrix.hpp" #include using matrix::Matrix; constexpr const int PATHING_TOWARD=1; constexpr const int PATHING_AWAY=-1; constexpr const int DIRECTION_MAX=8; class Pathing { public: size_t $width; size_t $height; Matrix $paths; Matrix $input; Pathing(size_t width, size_t height) : $width(width), $height(height), $paths(height, matrix::Row(width, 1)), $input(height, matrix::Row(width, 1)) {} void compute_paths(Matrix &walls); void set_target(const Point &at, int value=0); void clear_target(const Point &at); Matrix &paths() { return $paths; } Matrix &input() { return $input; } int distance(Point to) { return $paths[to.y][to.x];} bool random_walk(Point &out, bool random, int direction, size_t slice_count=4, size_t dist_size=4); bool INVARIANT(); };