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; }