public Vector3[] GenerateWaypoints(ITerrain terrain, Vector3 lastPos, int min, int max, float minDist, float maxDist) { if (min < 1 || max < min || maxDist < minDist) { throw new ArgumentException("Invalid arguments"); } var count = Utility.Random(min, max); var wps = new Vector3[count]; for (var i = 0; i < count; i++) { var direction = Utility.Random(0, MathUtil.TwoPI); var dist = Utility.Random(minDist, maxDist); lastPos.GetPointYX(direction, dist, out lastPos); lastPos.Z = terrain.QueryWorldHeight(lastPos); wps[i] = lastPos; } return wps; }
public static Vector3[] GenerateWaypoints(ITerrain terrain, Vector3 lastPos, float minDist, float maxDist, int count) { if (maxDist < minDist) { throw new ArgumentException(@"The maximum waypoint distance must be greater than the minimum", "maxDist"); } var wps = new Vector3[count]; for (var i = 0; i < count; i++) { var direction = Utility.Random(0, MathUtil.TwoPI); var dist = Utility.Random(minDist, maxDist); var z = lastPos.Z; lastPos.GetPointYX(direction, dist, out lastPos); lastPos.Z = z; //consider flying units lastPos.Z = terrain.GetGroundHeightUnderneath(lastPos); wps[i] = lastPos; } return wps; }