mirror of
https://github.com/ncblakely/GiantsTools
synced 2024-12-04 18:43:10 +01:00
78 lines
2.2 KiB
C++
78 lines
2.2 KiB
C++
#pragma once
|
|
|
|
// Recast
|
|
#include "Recast.h"
|
|
#include "DetourNavMesh.h"
|
|
#include "DetourNavMeshQuery.h"
|
|
|
|
// Framework
|
|
#include "Framework/InputGeom.h"
|
|
#include "Framework/Sample.h"
|
|
|
|
#include "NavMeshUtil.h"
|
|
#include "RecastContext.h"
|
|
|
|
class NavMeshGenerator
|
|
{
|
|
public:
|
|
NavMeshGenerator(std::shared_ptr<InputGeom> geom, std::shared_ptr<RecastContext> context);
|
|
virtual ~NavMeshGenerator();
|
|
|
|
bool BuildNavMesh();
|
|
bool Serialize(const std::filesystem::path& path, bool saveStatistics = true);
|
|
private:
|
|
void BuildAllTiles();
|
|
void CalculateTileSize();
|
|
void Cleanup();
|
|
bool WriteStatistics(const std::filesystem::path& path);
|
|
|
|
unsigned char* BuildTileMesh(const int tx, const int ty, const float* bmin, const float* bmax, int& dataSize);
|
|
|
|
std::shared_ptr<InputGeom> m_geom;
|
|
std::unique_ptr<dtNavMesh, NavMeshDeleter> m_navMesh;
|
|
std::unique_ptr<dtNavMeshQuery, NavMeshQueryDeleter> m_navMeshQuery;
|
|
std::shared_ptr<rcContext> m_ctx;
|
|
|
|
unsigned char* m_triareas{};
|
|
rcHeightfield* m_solid{};
|
|
rcCompactHeightfield* m_chf{};
|
|
rcContourSet* m_cset{};
|
|
rcPolyMesh* m_pmesh{};
|
|
rcPolyMeshDetail* m_dmesh{};
|
|
rcConfig m_cfg{};
|
|
|
|
// Core configuration
|
|
float m_cellSize = 0.3f;
|
|
float m_cellHeight = 0.2f;
|
|
float m_agentHeight = 2.0f;
|
|
float m_agentRadius = 0.6f;
|
|
float m_agentMaxClimb = 0.9f;
|
|
float m_agentMaxSlope = 50.0f; // Sample: 45.0f
|
|
float m_regionMinSize = 8;
|
|
float m_regionMergeSize = 20;
|
|
float m_edgeMaxLen = 12.0f;
|
|
float m_edgeMaxError = 1.3f;
|
|
float m_vertsPerPoly = 6.0f;
|
|
float m_detailSampleDist = 6.0f;
|
|
float m_detailSampleMaxError = 1.0f;
|
|
int m_partitionType = SAMPLE_PARTITION_WATERSHED;
|
|
bool m_keepInterResults = false;
|
|
|
|
// Core filtering configuration
|
|
bool m_filterLowHangingObstacles = true;
|
|
bool m_filterLedgeSpans = true;
|
|
bool m_filterWalkableLowHeightSpans = true;
|
|
|
|
// Tile configuration
|
|
int m_maxTiles = 0;
|
|
int m_maxPolysPerTile = 0;
|
|
float m_tileSize = 96; //Sample: 32
|
|
|
|
unsigned int m_tileCol{};
|
|
float m_lastBuiltTileBmin[3]{};
|
|
float m_lastBuiltTileBmax[3]{};
|
|
float m_tileMemUsage{};
|
|
float m_tileBuildTime{};
|
|
int m_tileTriCount{};
|
|
|
|
}; |