private static PointList CreateXZRoundRectangle(float xSize, float zSize, float radius, int cornerSides, AxisSide axisSide, float axisCoord) { PointList result = new PointList(); float x = xSize * 0.5f - radius; float z = zSize * 0.5f - radius; float PI_2 = Mathf.PI * 0.5f; float indexToAngle = PI_2 / cornerSides; if (axisSide == AxisSide.Negative) { // Corner 1 for (int i = 0; i < cornerSides + 1; i++) { float angle = PI_2 + i * indexToAngle; result.Add(-x + radius * Mathf.Cos(angle), axisCoord, z + radius * Mathf.Sin(angle)); } // Corner 2 for (int i = 0; i < cornerSides + 1; i++) { float angle = Mathf.PI + i * indexToAngle; result.Add(-x + radius * Mathf.Cos(angle), axisCoord, -z + radius * Mathf.Sin(angle)); } // Corner 3 for (int i = 0; i < cornerSides + 1; i++) { float angle = -PI_2 + i * indexToAngle; result.Add(x + radius * Mathf.Cos(angle), axisCoord, -z + radius * Mathf.Sin(angle)); } // Corner 4 for (int i = 0; i < cornerSides + 1; i++) { float angle = i * indexToAngle; result.Add(x + radius * Mathf.Cos(angle), axisCoord, z + radius * Mathf.Sin(angle)); } } else { // Corner 1 for (int i = 0; i < cornerSides + 1; i++) { float angle = Mathf.PI - i * indexToAngle; result.Add(-x + radius * Mathf.Cos(angle), axisCoord, z + radius * Mathf.Sin(angle)); } // Corner 4 for (int i = 0; i < cornerSides + 1; i++) { float angle = PI_2 - i * indexToAngle; result.Add(x + radius * Mathf.Cos(angle), axisCoord, z + radius * Mathf.Sin(angle)); } // Corner 3 for (int i = 0; i < cornerSides + 1; i++) { float angle = -i * indexToAngle; result.Add(x + radius * Mathf.Cos(angle), axisCoord, -z + radius * Mathf.Sin(angle)); } // Corner 2 for (int i = 0; i < cornerSides + 1; i++) { float angle = -PI_2 - i * indexToAngle; result.Add(-x + radius * Mathf.Cos(angle), axisCoord, -z + radius * Mathf.Sin(angle)); } } return(result); }