#pragma once #include "Node.h" #include "Path.h" namespace Gedeng { class NavMesh { // Build the NavMesh from all collider geometry in the given node and all // its children. void create_from_nodes(const Node &root); // Return true if the NavMesh has succesfully been created from nodes (by a // former `create_from_nodes` call) and its geometry is valid. bool is_valid() const; // Return a valid path from a given Vector3 to a given Vector3. // If no valid path can be constructed, the returned path will be of size 1 // and contain only the `from` vector. // The returned path may not be optimal -- if that is undesired, call // `optimize_path` on the result. Path get_path(const Vector3 &from, const Vector3 &to) const; // Optimize the given path to traverse the NavMesh as efficiently as // possible. This can be slow! void optimize_path(Path &path) const; }; } // namespace Gedeng