1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2024-12-31 18:15:01 +00:00
OpenMW/components/detournavigator/findrandompointaroundcircle.cpp
elsid e00eb50587
Remove stepping from findSmoothPath
This is not used anyway. There are features like smooth movement which remove
all redundant points.

Use single findStraightPath call instead of multiple.
2023-07-22 18:08:40 +02:00

33 lines
1.0 KiB
C++

#include "findrandompointaroundcircle.hpp"
#include <DetourNavMesh.h>
#include <DetourNavMeshQuery.h>
namespace DetourNavigator
{
std::optional<osg::Vec3f> findRandomPointAroundCircle(const dtNavMeshQuery& navMeshQuery,
const osg::Vec3f& halfExtents, const osg::Vec3f& start, const float maxRadius, const Flags includeFlags,
float (*prng)())
{
dtQueryFilter queryFilter;
queryFilter.setIncludeFlags(includeFlags);
dtPolyRef startRef = 0;
const dtStatus status
= navMeshQuery.findNearestPoly(start.ptr(), halfExtents.ptr(), &queryFilter, &startRef, nullptr);
if (dtStatusFailed(status))
return std::nullopt;
dtPolyRef resultRef = 0;
osg::Vec3f resultPosition;
navMeshQuery.findRandomPointAroundCircle(
startRef, start.ptr(), maxRadius, &queryFilter, prng, &resultRef, resultPosition.ptr());
if (resultRef == 0)
return std::optional<osg::Vec3f>();
return std::optional<osg::Vec3f>(resultPosition);
}
}