using System; using JetBrains.Annotations; using Routes; using UnityEngine; namespace Roads { [Serializable] public struct JunctionData { [SerializeField] private Transform north; [SerializeField] private Transform east; [SerializeField] private Transform south; [CanBeNull] public Transform GetEast(float yRotation) { var rotation = (int) yRotation; switch (rotation) { case 0: return east; case 90: return north; case 270: return south; default: return null; } } [CanBeNull] public Transform GetNorth(float yRotation) { var rotation = (int) yRotation; switch (rotation) { case 0: return north; case 180: return south; case 270: return east; default: return null; } } [CanBeNull] public Transform GetSouth(float yRotation) { var rotation = (int) yRotation; switch (rotation) { case 0: return south; case 90: return east; case 180: return north; default: return null; } } [CanBeNull] public Transform GetWest(float yRotation) { var rotation = (int) yRotation; switch (rotation) { case 90: return south; case 180: return east; case 270: return north; default: return null; } } } public class JunctionExtras : Turn { public JunctionData junctionData; protected override Transform RoadDirectionToTransform(RoadDirection position) { var rotation = transform.rotation.eulerAngles.y; switch (position) { case RoadDirection.North: return junctionData.GetNorth(rotation); case RoadDirection.West: return junctionData.GetWest(rotation); case RoadDirection.East: return junctionData.GetEast(rotation); case RoadDirection.South: return junctionData.GetSouth(rotation); case RoadDirection.None: throw new ArgumentException("RoadDirection.None not allowed for adding arrows"); default: throw new ArgumentOutOfRangeException(nameof(position), position, "Wrong Argument for AddArrows"); } } } }