public void ChangeMode() { var hasLeftSegment = TrafficPriority.HasLeftSegment(segmentId, nodeId) && TrafficPriority.HasLeftLane(nodeId, segmentId); var hasForwardSegment = TrafficPriority.HasForwardSegment(segmentId, nodeId) && TrafficPriority.HasForwardLane(nodeId, segmentId); var hasRightSegment = TrafficPriority.HasRightSegment(segmentId, nodeId) && TrafficPriority.HasRightLane(nodeId, segmentId); if (CurrentMode == Mode.Simple) { if (!hasLeftSegment) { CurrentMode = Mode.SingleRight; } else { CurrentMode = Mode.SingleLeft; } } else if (CurrentMode == Mode.SingleLeft) { if (!hasForwardSegment || !hasRightSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.SingleRight; } } else if (CurrentMode == Mode.SingleRight) { if (!hasLeftSegment) { CurrentMode = Mode.Simple; } else { CurrentMode = Mode.All; } } else { CurrentMode = Mode.Simple; } if (CurrentMode == Mode.Simple) { LightLeft = LightMain; LightRight = LightMain; LightPedestrian = _checkPedestrianLight(); } }