random road generation
This commit is contained in:
1 parent
b974bbd843
commit
ee223cabfd
56 files changed
+2952
-169
No files matched your search
@@ -0,0 +1,42 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user