From 76e2dcfc6deef1cb6934d6f9219e94b51559c293 Mon Sep 17 00:00:00 2001 From: Mikko Mononen Date: Sun, 1 Apr 2012 10:07:21 +0000 Subject: [PATCH] Fix for issue 197. --- RecastDemo/Include/CrowdTool.h | 2 ++ RecastDemo/Source/CrowdTool.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/RecastDemo/Include/CrowdTool.h b/RecastDemo/Include/CrowdTool.h index b47faa8..566b82e 100644 --- a/RecastDemo/Include/CrowdTool.h +++ b/RecastDemo/Include/CrowdTool.h @@ -56,6 +56,8 @@ struct CrowdToolParams class CrowdToolState : public SampleToolState { Sample* m_sample; + dtNavMesh* m_nav; + dtCrowd* m_crowd; float m_targetPos[3]; dtPolyRef m_targetRef; diff --git a/RecastDemo/Source/CrowdTool.cpp b/RecastDemo/Source/CrowdTool.cpp index 36e3591..c42b7ba 100644 --- a/RecastDemo/Source/CrowdTool.cpp +++ b/RecastDemo/Source/CrowdTool.cpp @@ -92,6 +92,8 @@ static void getAgentBounds(const dtCrowdAgent* ag, float* bmin, float* bmax) CrowdToolState::CrowdToolState() : m_sample(0), + m_nav(0), + m_crowd(0), m_targetRef(0), m_run(true) { @@ -142,8 +144,12 @@ void CrowdToolState::init(class Sample* sample) dtNavMesh* nav = m_sample->getNavMesh(); dtCrowd* crowd = m_sample->getCrowd(); - if (nav && crowd && crowd->getAgentCount() == 0) + + if (nav && crowd && (m_nav != nav || m_crowd != crowd)) { + m_nav = nav; + m_crowd = crowd; + crowd->init(MAX_AGENTS, m_sample->getAgentRadius(), nav); // Make polygons with 'disabled' flag invalid. @@ -163,7 +169,7 @@ void CrowdToolState::init(class Sample* sample) // Medium (22) params.velBias = 0.5f; - params.adaptiveDivs = 5; + params.adaptiveDivs = 5; params.adaptiveRings = 2; params.adaptiveDepth = 2; crowd->setObstacleAvoidanceParams(1, ¶ms);