#pragma once #include "src/Core/Core.h" #include "src/Rendering/Mesh/Mesh.h" #include "src/AI/NavMesh.h" #include "NavMeshDebugDrawer.h" class rcContext; class dtNavMesh; class dtNavMeshQuery; namespace Nuake { class RecastConfig; struct MeshTransformKeyPair { Ref mesh; Matrix4 transform; }; class NavManager { public: static NavManager& Get() { static NavManager instance; return instance; } void Initialize(); void PushMesh(const Ref& mesh, const Matrix4& transform); Ref BuildNavMesh(const RecastConfig& config); void DrawNavMesh(); void Cleanup(); private: NavManager() = default; ~NavManager() = default; std::vector m_Meshes; NavMeshDebugDrawer m_DebugDrawer; Ref m_RecastContext; dtNavMesh* m_DetourNavMesh; dtNavMeshQuery* m_DetourNavQuery; }; }