private IEnumerator GenerateNewSegment() { while (true) { // Define new start and end points, linearliy. var start = currentEnd; var end = currentEnd + (Vector3.forward * segmentLength); // Randomly translate the new end point. end = ApplyRandom(end, segmentDirectionRandomnessRange); // Define new control points, linearly. var fullSegmentVec = end - start; var thirdOfSegVect = fullSegmentVec / 3; var startControlPoint = start + thirdOfSegVect; var endControlPoint = start + (thirdOfSegVect * 2); // Randomly translate control points. startControlPoint = ApplyRandom(startControlPoint, controlPointsDirectionRandomnessRange); endControlPoint = ApplyRandom(endControlPoint, controlPointsDirectionRandomnessRange); // Smooth curve by aligning the new start control point to the last end control point. if (lastEndControlPoint.HasValue) { startControlPoint = AlignThirtPoint(lastEndControlPoint.Value, start, startControlPoint); } // Create the new curve. var newCurve = new Curve(start, startControlPoint, end, endControlPoint); curves.Add(newCurve); // Update the storages to use in the gizmos preview. curvesArr = curves.ToArray(); path = Bezier.GetPointsInPath(curves.ToArray(), previewResolution); // Set the ground for the next path. currentEnd = end; lastEndControlPoint = endControlPoint; yield return(new WaitForSeconds(0.3f)); } }
private IEnumerator GenerateNewSegment() { while (true) { // Define new start and end points, linearliy. var start = currentEnd; var end = currentEnd + (Vector3.forward * segmentLength); // Randomly translate the new end point. end = ApplyRandom(end, segmentDirectionRandomnessRange); // Define new control points, linearly. var fullSegmentVec = end - start; var thirdOfSegVect = fullSegmentVec / 3; var startControlPoint = start + thirdOfSegVect; var endControlPoint = start + (thirdOfSegVect * 2); // Randomly translate control points. startControlPoint = ApplyRandom(startControlPoint, controlPointsDirectionRandomnessRange); endControlPoint = ApplyRandom(endControlPoint, controlPointsDirectionRandomnessRange); // Smooth curve by aligning the new start control point to the last end control point. if (lastEndControlPoint.HasValue) startControlPoint = AlignThirtPoint(lastEndControlPoint.Value, start, startControlPoint); // Create the new curve. var newCurve = new Curve(start, startControlPoint, end, endControlPoint); curves.Add(newCurve); // Update the storages to use in the gizmos preview. curvesArr = curves.ToArray(); path = Bezier.GetPointsInPath(curves.ToArray(), previewResolution); // Set the ground for the next path. currentEnd = end; lastEndControlPoint = endControlPoint; yield return new WaitForSeconds(0.3f); } }