refactor: DtCrowdAgentUpdateFlags

This commit is contained in:
ikpil 2023-10-08 14:45:20 +09:00
parent 6416374f94
commit 2169a18c85
7 changed files with 66 additions and 47 deletions

View File

@ -832,7 +832,7 @@ namespace DotRecast.Detour.Crowd
continue; continue;
} }
if ((ag.option.updateFlags & DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO) == 0) if ((ag.option.updateFlags & DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO) == 0)
{ {
continue; continue;
} }
@ -950,7 +950,7 @@ namespace DotRecast.Detour.Crowd
// Check to see if the corner after the next corner is directly visible, // Check to see if the corner after the next corner is directly visible,
// and short cut to there. // and short cut to there.
if ((ag.option.updateFlags & DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS) != 0 && ag.corners.Count > 0) if ((ag.option.updateFlags & DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS) != 0 && ag.corners.Count > 0)
{ {
RcVec3f target = ag.corners[Math.Min(1, ag.corners.Count - 1)].pos; RcVec3f target = ag.corners[Math.Min(1, ag.corners.Count - 1)].pos;
ag.corridor.OptimizePathVisibility(target, ag.option.pathOptimizationRange, _navQuery, ag.corridor.OptimizePathVisibility(target, ag.option.pathOptimizationRange, _navQuery,
@ -1049,7 +1049,7 @@ namespace DotRecast.Detour.Crowd
else else
{ {
// Calculate steering direction. // Calculate steering direction.
if ((ag.option.updateFlags & DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS) != 0) if ((ag.option.updateFlags & DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS) != 0)
{ {
dvel = ag.CalcSmoothSteerDirection(); dvel = ag.CalcSmoothSteerDirection();
} }
@ -1067,7 +1067,7 @@ namespace DotRecast.Detour.Crowd
} }
// Separation // Separation
if ((ag.option.updateFlags & DtCrowdAgentParams.DT_CROWD_SEPARATION) != 0) if ((ag.option.updateFlags & DtCrowdAgentUpdateFlags.DT_CROWD_SEPARATION) != 0)
{ {
float separationDist = ag.option.collisionQueryRange; float separationDist = ag.option.collisionQueryRange;
float invSeparationDist = 1.0f / separationDist; float invSeparationDist = 1.0f / separationDist;
@ -1132,7 +1132,7 @@ namespace DotRecast.Detour.Crowd
continue; continue;
} }
if ((ag.option.updateFlags & DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE) != 0) if ((ag.option.updateFlags & DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE) != 0)
{ {
_obstacleQuery.Reset(); _obstacleQuery.Reset();

View File

@ -16,27 +16,27 @@
int updateFlags = 0; int updateFlags = 0;
if (anticipateTurns) if (anticipateTurns)
{ {
updateFlags |= DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS; updateFlags |= DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS;
} }
if (optimizeVis) if (optimizeVis)
{ {
updateFlags |= DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS; updateFlags |= DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS;
} }
if (optimizeTopo) if (optimizeTopo)
{ {
updateFlags |= DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO; updateFlags |= DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO;
} }
if (obstacleAvoidance) if (obstacleAvoidance)
{ {
updateFlags |= DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE; updateFlags |= DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE;
} }
if (separation) if (separation)
{ {
updateFlags |= DtCrowdAgentParams.DT_CROWD_SEPARATION; updateFlags |= DtCrowdAgentUpdateFlags.DT_CROWD_SEPARATION;
} }
return updateFlags; return updateFlags;

View File

@ -45,18 +45,6 @@ namespace DotRecast.Detour.Crowd
/// How aggresive the agent manager should be at avoiding collisions with this agent. [Limit: >= 0] /// How aggresive the agent manager should be at avoiding collisions with this agent. [Limit: >= 0]
public float separationWeight; public float separationWeight;
/// Crowd agent update flags.
public const int DT_CROWD_ANTICIPATE_TURNS = 1;
public const int DT_CROWD_OBSTACLE_AVOIDANCE = 2;
public const int DT_CROWD_SEPARATION = 4;
public const int DT_CROWD_OPTIMIZE_VIS = 8;
/// < Use #dtPathCorridor::OptimizePathVisibility() to optimize
/// the agent path.
public const int DT_CROWD_OPTIMIZE_TOPO = 16;
/// < Use dtPathCorridor::OptimizePathTopology() to optimize
/// the agent path. /// the agent path.
/// Flags that impact steering behavior. (See: #UpdateFlags) /// Flags that impact steering behavior. (See: #UpdateFlags)
public int updateFlags; public int updateFlags;

View File

@ -0,0 +1,14 @@
namespace DotRecast.Detour.Crowd
{
/// Crowd agent update flags.
/// @ingroup crowd
/// @see dtCrowdAgentParams::updateFlags
public static class DtCrowdAgentUpdateFlags
{
public const int DT_CROWD_ANTICIPATE_TURNS = 1;
public const int DT_CROWD_OBSTACLE_AVOIDANCE = 2;
public const int DT_CROWD_SEPARATION = 4;
public const int DT_CROWD_OPTIMIZE_VIS = 8; //< Use #dtPathCorridor::optimizePathVisibility() to optimize the agent path.
public const int DT_CROWD_OPTIMIZE_TOPO = 16; //< Use dtPathCorridor::optimizePathTopology() to optimize the agent path.
}
}

View File

@ -565,8 +565,10 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality0TVTA() public void TestAgent1Quality0TVTA()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE;
AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -588,8 +590,9 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality0TVT() public void TestAgent1Quality0TVT()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO;
AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -611,7 +614,7 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality0TV() public void TestAgent1Quality0TV()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS; int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS;
AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -633,7 +636,7 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality0T() public void TestAgent1Quality0T()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO; int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO;
AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 0, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -655,8 +658,10 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality1TVTA() public void TestAgent1Quality1TVTA()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE;
AddAgentGrid(1, 0.4f, updateFlags, 1, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 1, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -678,8 +683,10 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality2TVTA() public void TestAgent1Quality2TVTA()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE;
AddAgentGrid(1, 0.4f, updateFlags, 2, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 2, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -701,8 +708,10 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality3TVTA() public void TestAgent1Quality3TVTA()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE;
AddAgentGrid(1, 0.4f, updateFlags, 3, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 3, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -724,9 +733,11 @@ public class Crowd1Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality3TVTAS() public void TestAgent1Quality3TVTAS()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
| DtCrowdAgentParams.DT_CROWD_SEPARATION; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE |
DtCrowdAgentUpdateFlags.DT_CROWD_SEPARATION;
AddAgentGrid(1, 0.4f, updateFlags, 3, startPoss[0]); AddAgentGrid(1, 0.4f, updateFlags, 3, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);

View File

@ -308,8 +308,10 @@ public class Crowd4Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality2TVTA() public void TestAgent1Quality2TVTA()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE;
AddAgentGrid(2, 0.3f, updateFlags, 2, startPoss[0]); AddAgentGrid(2, 0.3f, updateFlags, 2, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -329,9 +331,11 @@ public class Crowd4Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality2TVTAS() public void TestAgent1Quality2TVTAS()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
| DtCrowdAgentParams.DT_CROWD_SEPARATION; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE |
DtCrowdAgentUpdateFlags.DT_CROWD_SEPARATION;
AddAgentGrid(2, 0.3f, updateFlags, 2, startPoss[0]); AddAgentGrid(2, 0.3f, updateFlags, 2, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);
@ -351,7 +355,7 @@ public class Crowd4Test : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality2T() public void TestAgent1Quality2T()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO; int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO;
AddAgentGrid(2, 0.3f, updateFlags, 2, startPoss[0]); AddAgentGrid(2, 0.3f, updateFlags, 2, startPoss[0]);
SetMoveTarget(endPoss[0], false); SetMoveTarget(endPoss[0], false);

View File

@ -99,8 +99,10 @@ public class Crowd4VelocityTest : AbstractCrowdTest
[Test] [Test]
public void TestAgent1Quality3TVTA() public void TestAgent1Quality3TVTA()
{ {
int updateFlags = DtCrowdAgentParams.DT_CROWD_ANTICIPATE_TURNS | DtCrowdAgentParams.DT_CROWD_OPTIMIZE_VIS int updateFlags = DtCrowdAgentUpdateFlags.DT_CROWD_ANTICIPATE_TURNS |
| DtCrowdAgentParams.DT_CROWD_OPTIMIZE_TOPO | DtCrowdAgentParams.DT_CROWD_OBSTACLE_AVOIDANCE; DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_VIS |
DtCrowdAgentUpdateFlags.DT_CROWD_OPTIMIZE_TOPO |
DtCrowdAgentUpdateFlags.DT_CROWD_OBSTACLE_AVOIDANCE;
AddAgentGrid(2, 0.3f, updateFlags, 3, endPoss[0]); AddAgentGrid(2, 0.3f, updateFlags, 3, endPoss[0]);
SetMoveTarget(endPoss[4], false); SetMoveTarget(endPoss[4], false);