refactor: RANDOM_POINTS_IN_CIRCLE

This commit is contained in:
ikpil 2023-09-10 13:30:02 +09:00
parent a0a3a24e75
commit 5fd07d1e07
2 changed files with 11 additions and 10 deletions

View File

@ -63,7 +63,7 @@ public class TestNavmeshSampleTool : ISampleTool
private RcVec3f[] m_queryPoly = new RcVec3f[4];
private List<RcVec3f> m_smoothPath;
private DtStatus m_pathFindStatus = DtStatus.DT_FAILURE;
private readonly List<RcVec3f> randomPoints = new();
private List<RcVec3f> _randomPoints = new();
public TestNavmeshSampleTool()
{
@ -552,7 +552,7 @@ public class TestNavmeshSampleTool : ISampleTool
dd.DepthMask(false);
dd.Begin(POINTS, 4.0f);
int col = DuRGBA(64, 16, 0, 220);
foreach (RcVec3f point in randomPoints)
foreach (RcVec3f point in _randomPoints)
{
dd.Vertex(point.x, point.y + 0.1f, point.z, col);
}
@ -766,13 +766,7 @@ public class TestNavmeshSampleTool : ISampleTool
}
else if (_mode == RcTestNavmeshToolMode.RANDOM_POINTS_IN_CIRCLE)
{
randomPoints.Clear();
if (m_sposSet && m_startRef != 0 && m_eposSet)
{
var points = new List<RcVec3f>();
_tool.FindRandomPointAroundCircle(navQuery, m_startRef, m_spos, m_epos, m_filter, _constrainByCircle, _randomPointCount, ref points);
randomPoints.AddRange(points);
}
_tool.FindRandomPointAroundCircle(navQuery, m_startRef, m_endRef, m_spos, m_epos, m_filter, _constrainByCircle, _randomPointCount, ref _randomPoints);
}
}

View File

@ -325,8 +325,14 @@ namespace DotRecast.Recast.Toolset.Tools
return status;
}
public DtStatus FindRandomPointAroundCircle(DtNavMeshQuery navQuery, long startRef, RcVec3f spos, RcVec3f epos, IDtQueryFilter filter, bool constrainByCircle, int count, ref List<RcVec3f> points)
public DtStatus FindRandomPointAroundCircle(DtNavMeshQuery navQuery, long startRef, long endRef, RcVec3f spos, RcVec3f epos, IDtQueryFilter filter, bool constrainByCircle, int count,
ref List<RcVec3f> points)
{
if (startRef == 0 || endRef == 0)
{
return DtStatus.DT_FAILURE;
}
float dx = epos.x - spos.x;
float dz = epos.z - spos.z;
float dist = (float)Math.Sqrt(dx * dx + dz * dz);
@ -338,6 +344,7 @@ namespace DotRecast.Recast.Toolset.Tools
var frand = new FRand();
int prevCnt = points.Count;
points = new List<RcVec3f>();
while (0 < count && points.Count < prevCnt + count)
{
var status = navQuery.FindRandomPointAroundCircle(startRef, spos, dist, filter, frand, constraint,