Esempio n. 1
0
        public static float DrawCircle(PolyLine line, Vector3 center, float radius, Color color, Vector3[] corners, List <Terrain> terrains, List <Rect> terrainRects, Transform parent = null)
        /// It will return an average height BTW almost for free :)
        {
            int   numCorners = corners.Length;
            float step       = 360f / (numCorners - 1);

            Terrain prevTerrain = null;
            Rect    prevRect    = new Rect();

            for (int i = 0; i < corners.Length; i++)
            {
                //corner initial position
                Vector3 corner = new Vector3(Mathf.Sin(step * i * Mathf.Deg2Rad), 0, Mathf.Cos(step * i * Mathf.Deg2Rad)) * radius + center;

                //checking if the corner lays within the same terrain first
                Terrain terrain = null;
                if (prevRect.Contains(new Vector2(corner.x, corner.z)))
                {
                    terrain = prevTerrain;
                }

                //finding proper terrain in all terrains in it's not in rect
                else
                {
                    int rectsCount = terrainRects.Count;
                    for (int r = 0; r < rectsCount; r++)
                    {
                        if (terrainRects[r].Contains(new Vector2(corner.x, corner.z)))
                        {
                            terrain     = terrains[r];
                            prevTerrain = terrains[r];
                            prevRect    = terrainRects[r];
                            break;
                        }
                    }
                }

                //sampling height
                corners[i] = corner;
                if (terrain != null)
                {
                    corners[i].y = terrain.SampleHeight(corner);
                }
            }

            line.DrawLine(corners, color, lineThickness, zMode: PolyLine.ZMode.Overlay, offset: 0, parent: parent);
            //Handles.DrawAAPolyLine(lineThickness, corners);

            //adjusting center height
            float heightSum = 0;

            for (int i = 0; i < corners.Length; i++)
            {
                heightSum += corners[i].y;
            }
            return(heightSum / (corners.Length - 1));
        }