C# Navigation
Provides an API for Navigation Meshes and Crowds.
public enum AgentObstacleAvoidanceQuality
{
Low, Medium, Good, High
};
public enum AgentTargetState
{
None = 0,
Failed,
Valid,
Requesting,
WaitingForQueue,
WaitingForPath,
Velocity,
};
[StructLayout(LayoutKind.Sequential)]
public struct AgentSettings
{
public float AgentRadius;
public float AgentHeight;
public float MaxAcceleration;
public float MaxSpeed;
public float SeparationWeight;
public AgentObstacleAvoidanceQuality ObstacleAvoidanceQuality;
public bool bAnticipateTurns;
public bool bOptimizeVis;
public bool bOptimizeTopo;
public bool bSeparation;
};
[StructLayout(LayoutKind.Sequential)]
public struct CrowdSettings
{
public uint MaxAgents;
public float MaxAgentRadius;
};
[StructLayout(LayoutKind.Sequential)]
public struct NavMeshSettings
{
public AABB AABB;
public uint MaxQueryNodes;
public uint ExpectedLayersPerTile;
public uint MaxLayers;
public uint MaxObstacles;
public uint TileSize;
public float CellSize;
public float CellHeight;
public float MaxSlope;
public float AgentHeight;
public float AgentMaxClimb;
public float AgentRadius;
public float EdgeMaxLen;
public float EdgeMaxError;
public float RegionMinSize;
public float RegionMergeSize;
public uint VertsPerPoly;
public uint BorderSize;
public bool FilterLowHangingObstacles;
public bool FilterLedgeSpans;
public bool FilterWalkableLowHeightSpans;
};
public class Navigation
{
// These return true on success
public static bool FindDistanceToWall(Vector3 pos, float maxRadius, out Vector3 outHitPos, out Vector3 outHitNormal, out float outHitDistance);
public static bool FindRandomPoint(out Vector3 outRandomPoint);
public static bool FindRandomPointInCircle(Vector3 pos, float radius, out Vector3 outRandomPoint);
public static bool IsValidPoint(Vector3 pos);
public static Vector3[] FindStraightPath(Vector3 start, Vector3 end, uint maxPolys = 256);
public static Vector3[] FindSmoothPath(Vector3 start, Vector3 end, uint maxPolys = 256, uint maxSmooth = 2048);
}
public class CrowdNavigation
{
// Makes all crowd agents move towards the target
public static void SetMoveTarget(Vector3 pos);
public static void ResetMoveTarget();
}