CrossingExtras.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Security.Cryptography;
  5. using JetBrains.Annotations;
  6. using Pools;
  7. using Routes;
  8. using UnityEngine;
  9. namespace Roads
  10. {
  11. [Serializable]
  12. public struct CrossingData
  13. {
  14. public Transform west;
  15. public Transform north;
  16. public Transform east;
  17. public Transform south;
  18. }
  19. public enum RoadDirection
  20. {
  21. West,
  22. North,
  23. East,
  24. South,
  25. None
  26. }
  27. public enum TurnDirection
  28. {
  29. Right,
  30. Left,
  31. Straight
  32. }
  33. static class TurnDirectionMapper
  34. {
  35. private static readonly Dictionary<RoadDirection, TurnDirection> fromSouth =
  36. new Dictionary<RoadDirection, TurnDirection>
  37. {
  38. {RoadDirection.East, TurnDirection.Right},
  39. {RoadDirection.West, TurnDirection.Left}
  40. };
  41. private static readonly Dictionary<RoadDirection, TurnDirection> fromNorth =
  42. new Dictionary<RoadDirection, TurnDirection>
  43. {
  44. {RoadDirection.East, TurnDirection.Left},
  45. {RoadDirection.West, TurnDirection.Right}
  46. };
  47. private static readonly Dictionary<RoadDirection, TurnDirection> fromWest =
  48. new Dictionary<RoadDirection, TurnDirection>
  49. {
  50. {RoadDirection.North, TurnDirection.Left},
  51. {RoadDirection.South, TurnDirection.Right}
  52. };
  53. private static readonly Dictionary<RoadDirection, TurnDirection> fromEast =
  54. new Dictionary<RoadDirection, TurnDirection>
  55. {
  56. {RoadDirection.North, TurnDirection.Right},
  57. {RoadDirection.South, TurnDirection.Left}
  58. };
  59. public static TurnDirection GetTurnDirection(RoadDirection from, RoadDirection to)
  60. {
  61. TurnDirection direction;
  62. switch (from)
  63. {
  64. case RoadDirection.West:
  65. return fromWest.TryGetValue(to, out direction) ? direction : TurnDirection.Straight;
  66. case RoadDirection.North:
  67. return fromNorth.TryGetValue(to, out direction) ? direction : TurnDirection.Straight;
  68. case RoadDirection.East:
  69. return fromEast.TryGetValue(to, out direction) ? direction : TurnDirection.Straight;
  70. case RoadDirection.South:
  71. return fromSouth.TryGetValue(to, out direction) ? direction : TurnDirection.Straight;
  72. default:
  73. return TurnDirection.Straight;
  74. }
  75. }
  76. }
  77. public class CrossingExtras : Turn
  78. {
  79. public CrossingData crossingData;
  80. protected override Transform RoadDirectionToTransform(RoadDirection position)
  81. {
  82. switch (position)
  83. {
  84. case RoadDirection.North:
  85. return crossingData.north;
  86. case RoadDirection.West:
  87. return crossingData.west;
  88. case RoadDirection.East:
  89. return crossingData.east;
  90. case RoadDirection.South:
  91. return crossingData.south;
  92. case RoadDirection.None:
  93. throw new ArgumentException("RoadDirection.None not allowed for adding arrows");
  94. default:
  95. throw new ArgumentOutOfRangeException(nameof(position), position, "Wrong Argument for AddArrows");
  96. }
  97. }
  98. }
  99. }