feat: add random point count

This commit is contained in:
ikpil 2023-09-10 12:45:49 +09:00
parent fccc6fa2e7
commit 54e8835cb7
2 changed files with 5 additions and 4 deletions

View File

@ -35,6 +35,7 @@ public class TestNavmeshSampleTool : ISampleTool
private int _straightPathOption;
// for random point in circle mode
private int _randomPointCount = 300;
private bool _constrainByCircle;
//
@ -126,6 +127,7 @@ public class TestNavmeshSampleTool : ISampleTool
if (_mode == RcTestNavmeshToolMode.RANDOM_POINTS_IN_CIRCLE)
{
ImGui.SliderInt("Random point count", ref _randomPointCount, 0, 10000);
ImGui.Checkbox("Constrained", ref _constrainByCircle);
}
@ -761,7 +763,7 @@ public class TestNavmeshSampleTool : ISampleTool
var refs = new List<long>();
var parentRefs = new List<long>();
var status = _tool.FindPolysAroundShape(navQuery, settings, m_startRef, m_spos, m_epos, m_filter, ref refs, ref parentRefs, out var queryPoly);
var status = _tool.FindPolysAroundShape(navQuery, settings.agentHeight, m_startRef, m_spos, m_epos, m_filter, ref refs, ref parentRefs, out var queryPoly);
if (status.Succeeded())
{
m_queryPoly = queryPoly;
@ -791,7 +793,7 @@ public class TestNavmeshSampleTool : ISampleTool
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, 500, ref points);
_tool.FindRandomPointAroundCircle(navQuery, m_startRef, m_spos, m_epos, m_filter, _constrainByCircle, _randomPointCount, ref points);
randomPoints.AddRange(points);
}
}

View File

@ -269,11 +269,10 @@ namespace DotRecast.Recast.Toolset.Tools
return navQuery.FindPolysAroundCircle(startRef, spos, dist, filter, ref resultRef, ref resultParent, ref costs);
}
public DtStatus FindPolysAroundShape(DtNavMeshQuery navQuery, RcNavMeshBuildSettings settings, long startRef, RcVec3f spos, RcVec3f epos, IDtQueryFilter filter, ref List<long> resultRef, ref List<long> resultParent, out RcVec3f[] queryPoly)
public DtStatus FindPolysAroundShape(DtNavMeshQuery navQuery, float agentHeight, long startRef, RcVec3f spos, RcVec3f epos, IDtQueryFilter filter, ref List<long> resultRef, ref List<long> resultParent, out RcVec3f[] queryPoly)
{
float nx = (epos.z - spos.z) * 0.25f;
float nz = -(epos.x - spos.x) * 0.25f;
float agentHeight = settings != null ? settings.agentHeight : 0;
queryPoly = new RcVec3f[4];
queryPoly[0].x = spos.x + nx * 1.2f;