forked from mirror/DotRecast
refactor: DtCrowdAgentUpdateFlags
This commit is contained in:
parent
6416374f94
commit
2169a18c85
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue