- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Path
- {
- public readonly Vector2[] lookPoints;
- public readonly Line[] turnBoundaries;
- public readonly int finishLineIndex;
- public readonly int slowDownIndex;
- public Path(Vector2[] waypoints, Vector2 startPosition, float turnDistance, float stoppingDistance)
- {
- lookPoints = waypoints;
- turnBoundaries = new Line[lookPoints.Length];
- finishLineIndex = turnBoundaries.Length - 1;
- for (int i = 0; i < lookPoints.Length; i++)
- {
- Vector2 currentPoint = lookPoints[i];
- Vector2 dirToCurrentPoint = (currentPoint - startPosition).normalized;
- Vector2 turnBoundaryPoint = (i == finishLineIndex) ? currentPoint : currentPoint - dirToCurrentPoint * turnDistance;
- turnBoundaries[i] = new Line(turnBoundaryPoint, startPosition - dirToCurrentPoint * turnDistance);
- startPosition = turnBoundaryPoint;
- }
- float distanceFromEndPoint = 0;
- for(int i = lookPoints.Length - 1; i > 0; i--)
- {
- distanceFromEndPoint += Vector2.Distance(lookPoints[i], lookPoints[i - 1]);
- if (distanceFromEndPoint > stoppingDistance)
- {
- slowDownIndex = i;
- break;
- }
- }
- }
- public void DrawWithGizmos()
- {
- Gizmos.color = Color.black;
- foreach (Vector2 v in lookPoints)
- {
- Gizmos.DrawCube(v + Vector2.up, Vector2.one);
- }
- Gizmos.color = Color.white;
- foreach (Line l in turnBoundaries)
- {
- l.DrawWithGizmos(10);
- }
- }
- }