Route.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Collections.Generic;
  3. using Roads;
  4. using UnityEditor;
  5. using UnityEngine;
  6. using UnityEngine.Rendering;
  7. namespace Routes
  8. {
  9. [Serializable]
  10. public struct RouteItem
  11. {
  12. public Turn turn;
  13. public RoadDirection from;
  14. public RoadDirection to;
  15. public void Apply()
  16. {
  17. if (turn.comingFrom != from || turn.goingTo != to)
  18. {
  19. turn.comingFrom = from;
  20. turn.goingTo = to;
  21. turn.UpdateArrows();
  22. }
  23. }
  24. public void Clear()
  25. {
  26. if (turn.comingFrom != RoadDirection.None || turn.goingTo != RoadDirection.None)
  27. {
  28. turn.comingFrom = RoadDirection.None;
  29. turn.goingTo = RoadDirection.None;
  30. turn.UpdateArrows();
  31. }
  32. }
  33. }
  34. public class Route : MonoBehaviour
  35. {
  36. public List<RouteItem> items;
  37. private int visibleLength;
  38. private int visibleStart;
  39. private int VisibleStart => Math.Max(0, visibleStart - 1);
  40. private int VisibleEnd => Math.Min(items.Count, VisibleStart + visibleLength);
  41. private void Start()
  42. {
  43. var routeManager = GetComponentInParent<RouteManager>();
  44. visibleStart = 0;
  45. visibleLength = routeManager.visibleLength;
  46. items.ForEach((item) => item.turn.OnTriggerExitBicycle = NextTurn);
  47. UpdateRouteItems();
  48. }
  49. private void NextTurn()
  50. {
  51. Debug.Log("Route: left intersection - show next turn");
  52. visibleStart++;
  53. UpdateRouteItems();
  54. }
  55. private void UpdateRouteItems()
  56. {
  57. for (var i = 0; i < VisibleEnd; i++)
  58. {
  59. var item = items[i];
  60. if (i >= VisibleStart)
  61. {
  62. item.Apply();
  63. }
  64. else
  65. {
  66. item.Clear();
  67. }
  68. }
  69. }
  70. }
  71. }