Recast: fix dtNavMeshQuery regression

pointers were also nulled during the memset after the move to the dtQueryStruct in commit 9049e61d34cb3f52627b8ca10f1b7da21e147ad9. Created dedicated 'Reset' method.
This commit is contained in:
Kawe Mazidjatari 2024-06-27 13:35:13 +02:00
parent baa3d8f878
commit 1255629fcf
2 changed files with 26 additions and 5 deletions

View File

@ -561,6 +561,27 @@ private:
struct dtQueryData
{
void Reset()
{
status = 0;
lastBestNode = nullptr;
lastBestNodeCost = 0.0f;
startRef = 0; endRef = 0;
startPos[0] = 0.0f;
startPos[1] = 0.0f;
startPos[2] = 0.0f;
endPos[0] = 0.0f;
endPos[1] = 0.0f;
endPos[2] = 0.0f;
options = 0;
raycastLimitSqr = 0.0f;
// NOTE: the nodepool/nodequeue pointers should not be reset !!!
}
dtStatus status;
struct dtNode* lastBestNode;
float lastBestNodeCost;

View File

@ -1202,7 +1202,7 @@ dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef
dtAssert(m_query.m_openList);
// Init path state.
memset(&m_query, 0, sizeof(dtQueryData));
m_query.Reset();
m_query.status = DT_FAILURE;
m_query.startRef = startRef;
m_query.endRef = endRef;
@ -1487,7 +1487,7 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, int* pathCount,
if (dtStatusFailed(m_query.status))
{
// Reset query.
memset(&m_query, 0, sizeof(dtQueryData));
m_query.Reset();
return DT_FAILURE;
}
@ -1557,7 +1557,7 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, int* pathCount,
const dtStatus details = m_query.status & DT_STATUS_DETAIL_MASK;
// Reset query.
memset(&m_query, 0, sizeof(dtQueryData));
m_query.Reset();
*pathCount = n;
@ -1578,7 +1578,7 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPathPartial(const dtPolyRef* existing
if (dtStatusFailed(m_query.status))
{
// Reset query.
memset(&m_query, 0, sizeof(dtQueryData));
m_query.Reset();
return DT_FAILURE;
}
@ -1658,7 +1658,7 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPathPartial(const dtPolyRef* existing
const dtStatus details = m_query.status & DT_STATUS_DETAIL_MASK;
// Reset query.
memset(&m_query, 0, sizeof(dtQueryData));
m_query.Reset();
*pathCount = n;