/// <summary>
        /// Gets a path for lightning starting at a random point on the mesh
        /// </summary>
        /// <param name="points">Points list to receive points for the path</param>
        public void CreateRandomLightningPath(List <Vector3> points)
        {
            if (meshHelper == null)
            {
                return;
            }

            // we want a path of at least 2 triangles
            RaycastHit hit = new RaycastHit();
            int        triangleIndex;

            maximumPathDistanceSquared = MaximumPathDistance * MaximumPathDistance;
            meshHelper.GenerateRandomPoint(ref hit, out triangleIndex);
            hit.distance = UnityEngine.Random.Range(MeshOffsetRange.Minimum, MeshOffsetRange.Maximum);
            Vector3 prevPoint           = hit.point + (hit.normal * hit.distance);
            float   pathDistanceSquared = UnityEngine.Random.Range(MinimumPathDistanceRange.Minimum, MinimumPathDistanceRange.Maximum);

            pathDistanceSquared *= pathDistanceSquared;
            sourcePoints.Add(MeshFilter.transform.TransformPoint(prevPoint));
            int dir        = (UnityEngine.Random.Range(0, 1) == 1 ? 3 : -3);
            int pathLength = UnityEngine.Random.Range(PathLengthCount.Minimum, PathLengthCount.Maximum);

            while (pathLength != 0)
            {
                triangleIndex += dir;
                if (triangleIndex >= 0 && triangleIndex < meshHelper.Triangles.Length)
                {
                    meshHelper.GetRaycastFromTriangleIndex(triangleIndex, ref hit);
                }
                else
                {
                    dir            = -dir;
                    triangleIndex += dir;
                    pathLength--;
                    continue;
                }
                hit.distance = UnityEngine.Random.Range(MeshOffsetRange.Minimum, MeshOffsetRange.Maximum);
                Vector3 hitPoint        = hit.point + (hit.normal * hit.distance);
                float   distanceSquared = (hitPoint - prevPoint).sqrMagnitude;
                if (distanceSquared > maximumPathDistanceSquared)
                {
                    break;
                }
                else if (distanceSquared >= pathDistanceSquared)
                {
                    prevPoint = hitPoint;
                    sourcePoints.Add(MeshFilter.transform.TransformPoint(hitPoint));
                    pathLength--;
                    pathDistanceSquared  = UnityEngine.Random.Range(MinimumPathDistanceRange.Minimum, MinimumPathDistanceRange.Maximum);
                    pathDistanceSquared *= pathDistanceSquared;
                }
            }
        }