remove class FindRandomPointResult

This commit is contained in:
ikpil 2023-06-10 23:18:21 +09:00
parent 3d2cb74e2c
commit a0877d3dc6
3 changed files with 28 additions and 61 deletions

View File

@ -0,0 +1,16 @@
using DotRecast.Core;
namespace DotRecast.Detour
{
public readonly struct DtPolyPoint
{
public readonly long refs;
public readonly RcVec3f pt;
public DtPolyPoint(long polyRefs, RcVec3f polyPt)
{
refs = polyRefs;
pt = polyPt;
}
}
}

View File

@ -1,49 +0,0 @@
/*
Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
recast4j copyright (c) 2015-2019 Piotr Piastucki piotr@jtilia.org
DotRecast Copyright (c) 2023 Choi Ikpil ikpil@naver.com
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
using DotRecast.Core;
namespace DotRecast.Detour.QueryResults
{
//TODO: (PP) Add comments
public class FindRandomPointResult
{
private readonly long randomRef;
private readonly RcVec3f randomPt;
public FindRandomPointResult(long randomRef, RcVec3f randomPt)
{
this.randomRef = randomRef;
this.randomPt = randomPt;
}
/// @param[out] randomRef The reference id of the random location.
public long GetRandomRef()
{
return randomRef;
}
/// @param[out] randomPt The random location.
public RcVec3f GetRandomPt()
{
return randomPt;
}
}
}

View File

@ -48,7 +48,7 @@ public class CrowdProfilingTool
private DtNavMesh navMesh; private DtNavMesh navMesh;
private DtCrowdConfig config; private DtCrowdConfig config;
private FRand rnd; private FRand rnd;
private readonly List<FindRandomPointResult> zones = new(); private readonly List<DtPolyPoint> _polyPoints = new();
private long crowdUpdateTime; private long crowdUpdateTime;
public CrowdProfilingTool(Func<DtCrowdAgentParams> agentParamsSupplier) public CrowdProfilingTool(Func<DtCrowdAgentParams> agentParamsSupplier)
@ -158,10 +158,10 @@ public class CrowdProfilingTool
private RcVec3f? GetVillagerPosition(DtNavMeshQuery navquery, IDtQueryFilter filter) private RcVec3f? GetVillagerPosition(DtNavMeshQuery navquery, IDtQueryFilter filter)
{ {
if (0 < zones.Count) if (0 < _polyPoints.Count)
{ {
int zone = (int)(rnd.Next() * zones.Count); int zone = (int)(rnd.Next() * _polyPoints.Count);
var status = navquery.FindRandomPointWithinCircle(zones[zone].GetRandomRef(), zones[zone].GetRandomPt(), zoneRadius, filter, rnd, var status = navquery.FindRandomPointWithinCircle(_polyPoints[zone].refs, _polyPoints[zone].pt, zoneRadius, filter, rnd,
out var randomRef, out var randomPt); out var randomRef, out var randomPt);
if (status.Succeeded()) if (status.Succeeded())
{ {
@ -174,7 +174,7 @@ public class CrowdProfilingTool
private void CreateZones() private void CreateZones()
{ {
zones.Clear(); _polyPoints.Clear();
IDtQueryFilter filter = new DtQueryDefaultFilter(); IDtQueryFilter filter = new DtQueryDefaultFilter();
DtNavMeshQuery navquery = new DtNavMeshQuery(navMesh); DtNavMeshQuery navquery = new DtNavMeshQuery(navMesh);
for (int i = 0; i < numberOfZones; i++) for (int i = 0; i < numberOfZones; i++)
@ -186,9 +186,9 @@ public class CrowdProfilingTool
if (status.Succeeded()) if (status.Succeeded())
{ {
bool valid = true; bool valid = true;
foreach (var zone in zones) foreach (var zone in _polyPoints)
{ {
if (RcVec3f.DistSqr(zone.GetRandomPt(), randomPt) < zoneSeparation) if (RcVec3f.DistSqr(zone.pt, randomPt) < zoneSeparation)
{ {
valid = false; valid = false;
break; break;
@ -197,7 +197,7 @@ public class CrowdProfilingTool
if (valid) if (valid)
{ {
zones.Add(new FindRandomPointResult(randomRef, randomPt)); _polyPoints.Add(new DtPolyPoint(randomRef, randomPt));
break; break;
} }
} }
@ -309,10 +309,10 @@ public class CrowdProfilingTool
private void MoveTraveller(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, CrowdAgentData crowAgentData) private void MoveTraveller(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, CrowdAgentData crowAgentData)
{ {
// Move to another zone // Move to another zone
List<FindRandomPointResult> potentialTargets = new(); List<DtPolyPoint> potentialTargets = new();
foreach (FindRandomPointResult zone in zones) foreach (var zone in _polyPoints)
{ {
if (RcVec3f.DistSqr(zone.GetRandomPt(), ag.npos) > zoneRadius * zoneRadius) if (RcVec3f.DistSqr(zone.pt, ag.npos) > zoneRadius * zoneRadius)
{ {
potentialTargets.Add(zone); potentialTargets.Add(zone);
} }
@ -321,7 +321,7 @@ public class CrowdProfilingTool
if (0 < potentialTargets.Count) if (0 < potentialTargets.Count)
{ {
potentialTargets.Shuffle(); potentialTargets.Shuffle();
crowd.RequestMoveTarget(ag, potentialTargets[0].GetRandomRef(), potentialTargets[0].GetRandomPt()); crowd.RequestMoveTarget(ag, potentialTargets[0].refs, potentialTargets[0].pt);
} }
} }