void NavmeshPruneTool::handleClick(const float* /*s*/, const float* p, bool shift) { if (!m_sample) return; InputGeom* geom = m_sample->getInputGeom(); if (!geom) return; dtNavMesh* nav = m_sample->getNavMesh(); if (!nav) return; dtNavMeshQuery* query = m_sample->getNavMeshQuery(); if (!query) return; dtVcopy(m_hitPos, p); m_hitPosSet = true; if (!m_flags) { m_flags = new NavmeshFlags; m_flags->init(nav); } const float ext[3] = {2,4,2}; dtQueryFilter filter; dtPolyRef ref = 0; query->findNearestPoly(p, ext, &filter, &ref, 0); floodNavmesh(nav, m_flags, ref, 1); }
bool OgreRecastNavmeshPruner::floodNavmesh(Ogre::Vector3 startPoint) { unsigned char flag = 1; // Flag to assign to all marked polys (must not be already assigned) // First find nearest navmesh poly to startPoint dtPolyRef startPoly; Ogre::Vector3 foundPt; if (!mRecast->findNearestPolyOnNavmesh(startPoint, foundPt, startPoly)) return false; floodNavmesh(startPoly, flag); return true; }