Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / NPC / Pathfinding / Path.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Path
  5. {
  6. public readonly Vector2[] lookPoints;
  7. public readonly Line[] turnBoundaries;
  8. public readonly int finishLineIndex;
  9. public readonly int slowDownIndex;
  10. public Path(Vector2[] waypoints, Vector2 startPosition, float turnDistance, float stoppingDistance)
  11. {
  12. lookPoints = waypoints;
  13. turnBoundaries = new Line[lookPoints.Length];
  14. finishLineIndex = turnBoundaries.Length - 1;
  15. for (int i = 0; i < lookPoints.Length; i++)
  16. {
  17. Vector2 currentPoint = lookPoints[i];
  18. Vector2 dirToCurrentPoint = (currentPoint - startPosition).normalized;
  19. Vector2 turnBoundaryPoint = (i == finishLineIndex) ? currentPoint : currentPoint - dirToCurrentPoint * turnDistance;
  20. turnBoundaries[i] = new Line(turnBoundaryPoint, startPosition - dirToCurrentPoint * turnDistance);
  21. startPosition = turnBoundaryPoint;
  22. }
  23. float distanceFromEndPoint = 0;
  24. for(int i = lookPoints.Length - 1; i > 0; i--)
  25. {
  26. distanceFromEndPoint += Vector2.Distance(lookPoints[i], lookPoints[i - 1]);
  27. if (distanceFromEndPoint > stoppingDistance)
  28. {
  29. slowDownIndex = i;
  30. break;
  31. }
  32. }
  33. }
  34. public void DrawWithGizmos()
  35. {
  36. Gizmos.color = Color.black;
  37. foreach (Vector2 v in lookPoints)
  38. {
  39. Gizmos.DrawCube(v + Vector2.up, Vector2.one);
  40. }
  41. Gizmos.color = Color.white;
  42. foreach (Line l in turnBoundaries)
  43. {
  44. l.DrawWithGizmos(10);
  45. }
  46. }
  47. }