Exemple #1
0
        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);
        }