Route.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 Transform bicycle;
  40. private int VisibleStart => Math.Max(0, visibleStart - 1);
  41. private int VisibleEnd => Math.Min(items.Count, VisibleStart + visibleLength);
  42. private void Start()
  43. {
  44. var routeManager = GetComponentInParent<RouteManager>();
  45. visibleStart = 0;
  46. visibleLength = routeManager.visibleLength;
  47. bicycle = routeManager.bicycle;
  48. items.ForEach((item) => item.turn.OnTriggerExitBicycle = NextTurn);
  49. UpdateRouteItems();
  50. }
  51. private void NextTurn()
  52. {
  53. Debug.Log("Route: left intersection - show next turn");
  54. visibleStart++;
  55. UpdateRouteItems();
  56. }
  57. private void UpdateRouteItems()
  58. {
  59. for (var i = 0; i < items.Count; i++)
  60. {
  61. var item = items[i];
  62. if (i >= VisibleStart && i < VisibleEnd)
  63. {
  64. item.Apply();
  65. }
  66. else
  67. {
  68. item.Clear();
  69. }
  70. }
  71. }
  72. }
  73. }