Files
PGiZ1/Assets/Code/Track/TrackGenerator.cs
T
2026-01-27 13:13:48 +03:00

42 lines
1.3 KiB
C#

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> { 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);
}
}
}