using System.Collections.Generic; using UnityEngine; namespace Code.Track { public static class TrackGenerator { public static TrackData Generate(int seed, float targetLength = 200f, int segmentCount = 15) { Random.InitState(seed); var points = new List { Vector3.zero }; var currentPos = Vector3.zero; var direction = Vector3.forward; for (var i = 0; i < segmentCount; i++) { var turn = Random.Range(-25f, 25f); direction = Quaternion.Euler(0, turn, 0) * direction; direction.y = 0; direction.Normalize(); var segLen = targetLength / segmentCount; currentPos += direction * segLen; points.Add(currentPos); } var actualLength = 0f; for (var i = 1; i < points.Count; i++) actualLength += Vector3.Distance(points[i - 1], points[i]); if (actualLength > 0.1f) { var scale = targetLength / actualLength; for (var i = 1; i < points.Count; i++) points[i] *= scale; } return new TrackData(points); } } }