using System.Collections.Generic; using UnityEngine; namespace Gley.TrafficSystem.Internal { /// /// Access intersection data. /// internal class AllIntersectionsDataHandler { private readonly AllIntersectionsData _allIntersectionsData; internal AllIntersectionsDataHandler(AllIntersectionsData data) { _allIntersectionsData = data; } internal void SetTrafficLightsBehaviour(TrafficLightsBehaviour trafficLightsBehaviour) { for (int i = 0; i < _allIntersectionsData.TrafficLightsIntersections.Length; i++) { GetTrafficLightsIntersection(i).SetTrafficLightsBehaviour(trafficLightsBehaviour); } for (int i = 0; i < _allIntersectionsData.TrafficLightsCrossings.Length; i++) { GetTrafficLightsCrossing(i).SetTrafficLightsBehaviour(trafficLightsBehaviour); } } internal void SetRoadToGreen(string intersectionName, int roadIndex, bool doNotChangeAgain) { for (int i = 0; i < _allIntersectionsData.TrafficLightsIntersections.Length; i++) { if (GetTrafficLightsIntersection(i).GetName() == intersectionName) { GetTrafficLightsIntersection(i).SetGreenRoad(roadIndex, doNotChangeAgain); return; } } Debug.LogWarning($"{intersectionName} not found. Make sure it is a Traffic Lights Intersection."); } internal TrafficLightsColor GetTrafficLightsCrossingState(string crossingName) { for (int i = 0; i < _allIntersectionsData.TrafficLightsCrossings.Length; i++) { if (GetTrafficLightsCrossing(i).GetName() == crossingName) { return GetTrafficLightsCrossing(i).GetCrossingState(); } } Debug.LogWarning($"{crossingName} not found"); return TrafficLightsColor.Red; } internal void SetCrossingState(string crossingName, TrafficLightsColor newColor, bool doNotChangeAgain, float realtimeSinceStartup) { for (int i = 0; i < _allIntersectionsData.TrafficLightsCrossings.Length; i++) { if (GetTrafficLightsCrossing(i).GetName() == crossingName) { GetTrafficLightsCrossing(i).SetCrossingState(newColor, doNotChangeAgain, realtimeSinceStartup); return; } } Debug.LogWarning($"{crossingName} not found"); } internal bool IsPriorityCrossingRed(string crossingName) { for (int i = 0; i < _allIntersectionsData.PriorityCrossings.Length; i++) { if (GetPriorityCrossing(i).GetName() == crossingName) { return GetPriorityCrossing(i).GetPriorityCrossingState(); } } Debug.LogWarning($"{crossingName} not found"); return false; } internal void SetPriorityCrossingState(string crossingName, bool stop, bool stopUpdate) { for (int i = 0; i < _allIntersectionsData.PriorityCrossings.Length; i++) { if (GetPriorityCrossing(i).GetName() == crossingName) { GetPriorityCrossing(i).SetPriorityCrossingState(stop, stopUpdate); } } } internal GenericIntersection[] GetAllIntersections() { return _allIntersectionsData.AllIntersections; } internal List GetIntersections(List intersectionIndexes) { List result = new List(); for (int i = 0; i < intersectionIndexes.Count; i++) { result.Add(GetIntersection(intersectionIndexes[i])); } return result; } private GenericIntersection GetIntersection(int intersectionIndex) { return _allIntersectionsData.AllIntersections[intersectionIndex]; } private TrafficLightsIntersection GetTrafficLightsIntersection(int intersectionIndex) { return _allIntersectionsData.TrafficLightsIntersections[intersectionIndex]; } private TrafficLightsCrossing GetTrafficLightsCrossing(int intersectionIndex) { return _allIntersectionsData.TrafficLightsCrossings[intersectionIndex]; } private PriorityCrossing GetPriorityCrossing(int intersectionIndex) { return _allIntersectionsData.PriorityCrossings[intersectionIndex]; } } }