Merge branch 'navigator_debug' into 'master'

Navigator debugging and logging

See merge request OpenMW/openmw!3122
revert-6246b479
psi29a 2 years ago
commit 613003e1c7

@ -38,9 +38,8 @@ namespace testing
template <>
inline testing::Message& Message::operator<<(const osg::Vec3f& value)
{
return (*this) << "Vec3fEq(" << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.x()
<< ", " << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.y() << ", "
<< std::setprecision(std::numeric_limits<float>::max_exponent10) << value.z() << ')';
return (*this) << std::setprecision(std::numeric_limits<float>::max_exponent10) << "Vec3fEq(" << value.x()
<< ", " << value.y() << ", " << value.z() << ')';
}
template <>

@ -433,8 +433,8 @@ namespace DetourNavigator
return JobStatus::MemoryCacheMiss;
}
preparedNavMeshData
= prepareNavMeshTileData(*recastMesh, job.mChangedTile, job.mAgentBounds, mSettings.get().mRecast);
preparedNavMeshData = prepareNavMeshTileData(
*recastMesh, job.mWorldspace, job.mChangedTile, job.mAgentBounds, mSettings.get().mRecast);
if (preparedNavMeshData == nullptr)
{
@ -483,8 +483,8 @@ namespace DetourNavigator
if (preparedNavMeshData == nullptr)
{
preparedNavMeshData
= prepareNavMeshTileData(*job.mRecastMesh, job.mChangedTile, job.mAgentBounds, mSettings.get().mRecast);
preparedNavMeshData = prepareNavMeshTileData(
*job.mRecastMesh, job.mWorldspace, job.mChangedTile, job.mAgentBounds, mSettings.get().mRecast);
generatedNavMeshData = true;
}

@ -114,9 +114,17 @@ namespace DetourNavigator
std::ostream& operator<<(std::ostream& stream, const WriteDtStatus& value)
{
for (const auto& status : dtStatuses)
if (value.mStatus & status.mStatus)
stream << status.mString;
bool first = true;
for (const auto& v : dtStatuses)
{
if ((value.mStatus & v.mStatus) == 0)
continue;
if (first)
first = false;
else
stream << " | ";
stream << v.mString;
}
return stream;
}
@ -207,6 +215,22 @@ namespace DetourNavigator
return stream << "TilesPositionsRange {" << value.mBegin << ", " << value.mEnd << "}";
}
std::ostream& operator<<(std::ostream& stream, const AreaCosts& value)
{
return stream << "AreaCosts {"
<< ".mWater = " << value.mWater << ", .mDoor = " << value.mDoor
<< ", .mPathgrid = " << value.mPathgrid << ", .mGround = " << value.mGround << "}";
}
std::ostream& operator<<(std::ostream& stream, const DetourSettings& value)
{
return stream << "DetourSettings {"
<< ".mMaxPolys = " << value.mMaxPolys
<< ", .mMaxNavMeshQueryNodes = " << value.mMaxNavMeshQueryNodes
<< ", .mMaxPolygonPathSize = " << value.mMaxPolygonPathSize
<< ", .mMaxSmoothPathSize = " << value.mMaxSmoothPathSize << "}";
}
void writeToFile(const RecastMesh& recastMesh, const std::string& pathPrefix, const std::string& revision,
const RecastSettings& settings)
{

@ -20,6 +20,8 @@ namespace DetourNavigator
{
struct Version;
struct TilesPositionsRange;
struct AreaCosts;
struct DetourSettings;
std::ostream& operator<<(std::ostream& stream, const TileBounds& value);
@ -61,6 +63,10 @@ namespace DetourNavigator
std::ostream& operator<<(std::ostream& stream, const TilesPositionsRange& value);
std::ostream& operator<<(std::ostream& stream, const AreaCosts& value);
std::ostream& operator<<(std::ostream& stream, const DetourSettings& value);
class RecastMesh;
struct RecastSettings;

@ -79,7 +79,8 @@ namespace DetourNavigator
return;
}
const auto data = prepareNavMeshTileData(*recastMesh, mTilePosition, mAgentBounds, mSettings.mRecast);
const auto data
= prepareNavMeshTileData(*recastMesh, mWorldspace, mTilePosition, mAgentBounds, mSettings.mRecast);
if (data == nullptr)
return;

@ -517,9 +517,10 @@ namespace DetourNavigator
namespace DetourNavigator
{
std::unique_ptr<PreparedNavMeshData> prepareNavMeshTileData(const RecastMesh& recastMesh,
const TilePosition& tilePosition, const AgentBounds& agentBounds, const RecastSettings& settings)
std::string_view worldspace, const TilePosition& tilePosition, const AgentBounds& agentBounds,
const RecastSettings& settings)
{
RecastContext context(tilePosition, agentBounds);
RecastContext context(worldspace, tilePosition, agentBounds);
const auto [minZ, maxZ] = getBoundsByZ(recastMesh, agentBounds.mHalfExtents.z(), settings);

@ -42,7 +42,8 @@ namespace DetourNavigator
}
std::unique_ptr<PreparedNavMeshData> prepareNavMeshTileData(const RecastMesh& recastMesh,
const TilePosition& tilePosition, const AgentBounds& agentBounds, const RecastSettings& settings);
std::string_view worldspace, const TilePosition& tilePosition, const AgentBounds& agentBounds,
const RecastSettings& settings);
NavMeshData makeNavMeshTileData(const PreparedNavMeshData& data,
const std::vector<OffMeshConnection>& offMeshConnections, const AgentBounds& agentBounds,

@ -23,17 +23,19 @@ namespace DetourNavigator
return Debug::Debug;
}
std::string formatPrefix(const TilePosition& tilePosition, const AgentBounds& agentBounds)
std::string formatPrefix(
std::string_view worldspace, const TilePosition& tilePosition, const AgentBounds& agentBounds)
{
std::ostringstream stream;
stream << "Tile position: " << tilePosition.x() << ", " << tilePosition.y()
<< "; agent bounds: " << agentBounds << "; ";
stream << "Worldspace: " << worldspace << "; tile position: " << tilePosition.x() << ", "
<< tilePosition.y() << "; agent bounds: " << agentBounds << "; ";
return stream.str();
}
}
RecastContext::RecastContext(const TilePosition& tilePosition, const AgentBounds& agentBounds)
: mPrefix(formatPrefix(tilePosition, agentBounds))
RecastContext::RecastContext(
std::string_view worldspace, const TilePosition& tilePosition, const AgentBounds& agentBounds)
: mPrefix(formatPrefix(worldspace, tilePosition, agentBounds))
{
}

@ -14,7 +14,8 @@ namespace DetourNavigator
class RecastContext final : public rcContext
{
public:
explicit RecastContext(const TilePosition& tilePosition, const AgentBounds& agentBounds);
explicit RecastContext(
std::string_view worldspace, const TilePosition& tilePosition, const AgentBounds& agentBounds);
const std::string& getPrefix() const { return mPrefix; }

Loading…
Cancel
Save