Core/MMaps: Fix infinite loop in Detour (ported commit: c602220e02bed1ad76c9e60064eeec5fd97bfe80)
This commit is contained in:
1 parent
b96f544f94
commit
bd58cb3ab1
4 files changed
+18
-7
No files matched your search
+2
-1
@@ -58,7 +58,8 @@ gSOAP (a portable development toolkit for C and C++ XML Web services and XML dat
|
||||
|
||||
recastnavigation (Recast is state of the art navigation mesh construction toolset for games)
|
||||
https://github.com/recastnavigation/recastnavigation
|
||||
Version: 2c85309280dbc9c82029e7ab16dfb01b9235c74e
|
||||
Version: 3a619d773deb7e3a15ee215217c825995fe71312
|
||||
Custom changes: https://github.com/TrinityCore/recastnavigation/tree/3.3.5
|
||||
|
||||
StormLib (a pack of modules, written in C++, which are able to read and also to write files from/to the MPQ archives)
|
||||
http://www.zezula.net/en/mpq/stormlib.html
|
||||
|
||||
@@ -226,7 +226,14 @@ bool dtClosestHeightPointTriangle(const float* p, const float* a, const float* b
|
||||
|
||||
// If point lies inside the triangle, return interpolated ycoord.
|
||||
if (u >= epsilon && v >= epsilon && (u+v) <= denom - epsilon) {
|
||||
h = a[1] + (v0[1]*u + v1[1]*v) / denom;
|
||||
if (denom == 0.f && u == 0.f && v == 0.f)
|
||||
h = a[1];
|
||||
else
|
||||
h = a[1] + (v0[1] * u + v1[1] * v) / denom;
|
||||
|
||||
if (!dtMathIsfinite(h))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -1301,8 +1301,8 @@ dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef
|
||||
m_query.raycastLimitSqr = FLT_MAX;
|
||||
|
||||
// Validate input
|
||||
if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)
|
||||
|| !startPos || !dtVisfinite(startPos) ||
|
||||
if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef) ||
|
||||
!startPos || !dtVisfinite(startPos) ||
|
||||
!endPos || !dtVisfinite(endPos) || !filter)
|
||||
{
|
||||
return DT_FAILURE | DT_INVALID_PARAM;
|
||||
|
||||
@@ -820,10 +820,12 @@ dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPo
|
||||
dtPolyRef visited[MAX_VISIT_POLY];
|
||||
|
||||
uint32 nvisited = 0;
|
||||
_navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY);
|
||||
if (dtStatusFailed(_navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY)))
|
||||
return DT_FAILURE;
|
||||
npolys = FixupCorridor(polys, npolys, MAX_PATH_LENGTH, visited, nvisited);
|
||||
|
||||
_navMeshQuery->getPolyHeight(polys[0], result, &result[1]);
|
||||
if (dtStatusFailed(_navMeshQuery->getPolyHeight(polys[0], result, &result[1])))
|
||||
return DT_FAILURE;
|
||||
result[1] += 0.5f;
|
||||
dtVcopy(iterPos, result);
|
||||
|
||||
@@ -868,7 +870,8 @@ dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPo
|
||||
}
|
||||
// Move position at the other side of the off-mesh link.
|
||||
dtVcopy(iterPos, connectionEndPos);
|
||||
_navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1]);
|
||||
if (dtStatusFailed(_navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1])))
|
||||
return DT_FAILURE;
|
||||
iterPos[1] += 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user