/// <summary> /// The connections in the set. /// </summary> /// <param name="index"> /// The index of the connection. [Limits: 0 <= value < <see cref="Count"/>]. /// </param> /// <returns>The connection.</returns> public OffMeshConnection this[int index] { get { // Not using parameterized constructor. Don't need validation cost. OffMeshConnection result = new OffMeshConnection(); result.start = mVerts[index * 2 + 0]; result.end = mVerts[index * 2 + 1]; result.radius = mRadii[index]; result.direction = mDirs[index]; result.flags = mFlags[index]; result.area = mAreas[index]; result.userId = mUserIds[index]; return(result); } set { // Must be validated. // Let exceptions be thrown. mRadii[index] = MathUtil.ClampToPositiveNonZero(value.radius); mDirs[index] = (byte)(value.IsBiDirectional ? 1 : 0); mAreas[index] = NMGen.ClampArea(value.area); mFlags[index] = value.flags; mUserIds[index] = value.userId; // Keep verts last. mVerts[index * 2 + 0] = value.start; mVerts[index * 2 + 1] = value.end; } }
/// <summary> /// Add a connection. /// </summary> /// <remarks> /// <para> /// All values are auto-clamped to valid values. /// </para> /// </remarks> /// <param name="start">The connection start point.</param> /// <param name="end">The connection end point.</param> /// <param name="radius">The radius of the connection vertices.</param> /// <param name="isBidirectional">True if the connection can be traversed in both /// directions. (Start to end, end to start.)</param> /// <param name="area">The connection area id.</param> /// <param name="flags">The connection flags.</param> /// <param name="userId">The connection user id.</param> public void Add(Vector3 start, Vector3 end, float radius , bool isBidirectional, byte area, ushort flags, uint userId) { mVerts.Add(start); mVerts.Add(end); mRadii.Add(System.Math.Max(MathUtil.Epsilon, radius)); mDirs.Add((byte)(isBidirectional ? 1 : 0)); mAreas.Add(NMGen.ClampArea(area)); mFlags.Add(flags); mUserIds.Add(userId); }
/// <summary> /// Add a connection. /// </summary> /// <remarks> /// <para> /// The connection fields are auto-clamped to valid values. /// </para> /// </remarks> /// <param name="connection">The connection to add.</param> public void Add(OffMeshConnection connection) { // Must be validated. mVerts.Add(connection.start); mVerts.Add(connection.end); mRadii.Add(MathUtil.ClampToPositiveNonZero(connection.radius)); mDirs.Add((byte)(connection.IsBiDirectional ? 1 : 0)); mAreas.Add(NMGen.ClampArea(connection.area)); mFlags.Add(connection.flags); mUserIds.Add(connection.userId); }
/// <summary> /// Constructor /// </summary> /// <param name="name">The processor name.</param> /// <param name="priority">The processor priority.</param> /// <param name="area">The area to apply.</param> public AreaMarker(string name, int priority, byte area) : base(name, priority) { mArea = NMGen.ClampArea(area); }