Fixed google code Issue 228
- more defencive use of finNearestPoly() in dtCrowd
This commit is contained in:
parent
c0d1efac27
commit
990b245179
@ -516,8 +516,14 @@ int dtCrowd::addAgent(const float* pos, const dtCrowdAgentParams* params)
|
|||||||
|
|
||||||
// Find nearest position on navmesh and place the agent there.
|
// Find nearest position on navmesh and place the agent there.
|
||||||
float nearest[3];
|
float nearest[3];
|
||||||
dtPolyRef ref;
|
dtPolyRef ref = 0;
|
||||||
m_navquery->findNearestPoly(pos, m_ext, &m_filter, &ref, nearest);
|
dtVcopy(nearest, pos);
|
||||||
|
dtStatus status = m_navquery->findNearestPoly(pos, m_ext, &m_filter, &ref, nearest);
|
||||||
|
if (dtStatusFailed(status))
|
||||||
|
{
|
||||||
|
dtVcopy(nearest, pos);
|
||||||
|
ref = 0;
|
||||||
|
}
|
||||||
|
|
||||||
ag->corridor.reset(ref, nearest);
|
ag->corridor.reset(ref, nearest);
|
||||||
ag->boundary.reset();
|
ag->boundary.reset();
|
||||||
@ -941,8 +947,9 @@ void dtCrowd::checkPathValidity(dtCrowdAgent** agents, const int nagents, const
|
|||||||
// Current location is not valid, try to reposition.
|
// Current location is not valid, try to reposition.
|
||||||
// TODO: this can snap agents, how to handle that?
|
// TODO: this can snap agents, how to handle that?
|
||||||
float nearest[3];
|
float nearest[3];
|
||||||
|
dtVcopy(nearest, agentPos);
|
||||||
agentRef = 0;
|
agentRef = 0;
|
||||||
m_navquery->findNearestPoly(ag->npos, m_ext, &m_filter, &agentRef, nearest);
|
dtStatus status = m_navquery->findNearestPoly(ag->npos, m_ext, &m_filter, &agentRef, nearest);
|
||||||
dtVcopy(agentPos, nearest);
|
dtVcopy(agentPos, nearest);
|
||||||
|
|
||||||
if (!agentRef)
|
if (!agentRef)
|
||||||
@ -971,6 +978,8 @@ void dtCrowd::checkPathValidity(dtCrowdAgent** agents, const int nagents, const
|
|||||||
{
|
{
|
||||||
// Current target is not valid, try to reposition.
|
// Current target is not valid, try to reposition.
|
||||||
float nearest[3];
|
float nearest[3];
|
||||||
|
dtVcopy(nearest, ag->targetPos);
|
||||||
|
ag->targetRef = 0;
|
||||||
m_navquery->findNearestPoly(ag->targetPos, m_ext, &m_filter, &ag->targetRef, nearest);
|
m_navquery->findNearestPoly(ag->targetPos, m_ext, &m_filter, &ag->targetRef, nearest);
|
||||||
dtVcopy(ag->targetPos, nearest);
|
dtVcopy(ag->targetPos, nearest);
|
||||||
replan = true;
|
replan = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user