Update dNavMesh.cpp

This commit is contained in:
David Markowitz 2023-08-08 23:54:47 -07:00
parent cceaa96415
commit fc56777969

View File

@ -10,6 +10,7 @@
#include "BinaryPathFinder.h"
#include "dZoneManager.h"
#include "DluAssert.h"
dNavMesh::dNavMesh(uint32_t zoneId) {
m_ZoneId = zoneId;
@ -130,15 +131,23 @@ float dNavMesh::GetHeightAtPoint(const NiPoint3& location, const float halfExten
pos[2] = location.z;
dtPolyRef nearestRef = 0;
float polyPickExt[3] = { 32.0f, halfExtentsHeight, 32.0f };
float polyPickExt[3] = { 0.0f, halfExtentsHeight, 0.0f };
float nearestPoint[3] = { 0.0f, 0.0f, 0.0f };
dtQueryFilter filter{};
m_NavQuery->findNearestPoly(pos, polyPickExt, &filter, &nearestRef, 0);
m_NavQuery->getPolyHeight(nearestRef, pos, &toReturn);
auto res = m_NavQuery->findNearestPoly(pos, polyPickExt, &filter, &nearestRef, nearestPoint);
res = m_NavQuery->getPolyHeight(nearestRef, pos, &toReturn);
if (toReturn != 0.0f) {
DluAssert(toReturn == nearestPoint[1]);
}
if (toReturn == 0.0f) {
toReturn = location.y;
// If we were unable to get the poly height, but the query returned a success, just use the height of the nearest point.
// This is what seems to happen anyways and it is better than returning zero.
} else if (res == DT_SUCCESS) {
toReturn = nearestPoint[1];
}
// If we failed to even find a poly, do not change the height since we have no idea what it should be.
return toReturn;
}