using System; using System.Collections.Generic; using Roads; using UnityEditor; using UnityEngine; using UnityEngine.Rendering; namespace Routes { [Serializable] public struct RouteItem { public Turn turn; public RoadDirection from; public RoadDirection to; public void Apply() { if (turn.comingFrom != from || turn.goingTo != to) { turn.comingFrom = from; turn.goingTo = to; turn.UpdateArrows(); } } public void Clear() { if (turn.comingFrom != RoadDirection.None || turn.goingTo != RoadDirection.None) { turn.comingFrom = RoadDirection.None; turn.goingTo = RoadDirection.None; turn.UpdateArrows(); } } } public class Route : MonoBehaviour { public List items; private int visibleLength; private int visibleStart; private Transform bicycle; private int VisibleStart => Math.Max(0, visibleStart - 1); private int VisibleEnd => Math.Min(items.Count, VisibleStart + visibleLength); private void Start() { var routeManager = GetComponentInParent(); visibleStart = 0; visibleLength = routeManager.visibleLength; bicycle = routeManager.bicycle; items.ForEach((item) => item.turn.OnTriggerExitBicycle = NextTurn); UpdateRouteItems(); } private void NextTurn() { Debug.Log("Route: left intersection - show next turn"); visibleStart++; UpdateRouteItems(); } private void UpdateRouteItems() { for (var i = 0; i < items.Count; i++) { var item = items[i]; if (i >= VisibleStart && i < VisibleEnd) { item.Apply(); } else { item.Clear(); } } } } }