Traffic Light

Моделирует светофор - оптическое устройство, предназначенное для регулирования движения на автомобильных, пешеходных перекрестках, а также других сложно контролируемых участках дорожного движения. 

Демо модель: Traffic Light

Элемент Библиотеки дорожного движения Traffic Light может контролировать движение транспорта на указанных перекрестках или стоп-линиях.

Демо модель: Traffic Light Phases Optimization

Параметры

Задает режим работы для
Опция определяет элементы разметки, для которых светофор задает режим работы:

Стоп-линий перекрестка -  светофор будет контролировать движение транспорта у стоп-линий перекрестка, который пользователь может указать в поле Перекресток, расположенном ниже. Затем необходимо настроить график работы светофора, указав в таблице Фазы цвет фаз (красная/желтая/зеленая) и их длительность. Этот режим используется, когда светофор контролирует (запрещает/разрешает) движение транспорта сразу на всех полосах каждой дороги, присоединенной к этому перекрестку. Используйте опцию Соединителей полос перекрестка, когда движение на определенных полосах дороги необходимо разрешить, а на других полосах этой же дороги запретить.

Соединителей полос перекрестка
-  используйте эту опцию, чтобы контролировать движение на перекрестке, где у полос одной дороги могут быть разные фазы (красная / зеленая).  Перекресток необходимо указать в поле Перекресток, расположенном ниже. Затем необходимо настроить график работы светофора, указав в таблице Фазы цвет фаз (красная/желтая/зеленая) и их длительность.

Заданных стоп-линий
- светофор будет контролировать движение транспорта у заданных стоп-линий. Этот режим обычно используется для моделирования пешеходных переходов. В этом случае вы рисуете стоп-линию и определяете поведение транспорта у нее, задавая фазы (красная/желтая/зеленая) и их продолжительность в таблице Фазы, расположенной ниже.
Перекресток
[Параметр виден, если выше выбрана опция Задает режим работы для: Стоп линий перекрестка или Соединителей полос перекресткаПерекресток, контролируемый этим светофором. Если в дорожной сети нет указанного перекрестка или Перекресток не указан, будет показано сообщение об ошибке.
Тип значения: Intersection
Фазы
Задает поведение у стоп-линии. Подробный пример задания режима работы светофора на перекрестке описан здесь.
Действия
При смене фазы [код]
Здесь вы можете задать код, который будет выполняться при смене фазы светофора, а также при включении / выключении светофора с помощью вызова функций turnOn(...) / turnOff().
Локальная переменная:  int currentPhaseIndex - текущая фаза светофора (после смены на следующую фазу)

Функции

boolean isOn() - Возвращает true, если светофор работает, false в противном случае.

turnOn() - Включает светофор.

turnOff() - Выключает светофор.

turnOn(double offset) - Включает светофор с задержкой в единицах модельного времени.

Параметр: offset - задержка в единицах модельного времени

turnOn(double offset, TimeUnits units) - Включает светофор с задержкой в указанных единицах модельного времени. К примеру, вызов функции turnOn(1, MINUTE) включит светофор через 1 минуту от текущего времени.

Параметры:
offset - задержка в указанных единицах модельного времени
units - константа единиц измерения времени

switchToNextPhase() - Включает следующую фазу светофора. Типичный пример использования: текущая фаза бесконечна и ее необходимо переключить.

double getCurrentPhaseDuration() - Возвращает длительность текущей фазы в единицах модельного времени или -1 если светофор выключен.

double getCurrentPhaseDuration(TimeUnits units) - Возвращает длительность текущей фазы в указанных единицах измерения времени. К примеру, если длительность текущей фазы составляет 30 секунд, вызов функции getCurrentPhaseDuration(MINUTE) вернет 0.5. Если светофор выключен, функция вернет -1.

Параметр: units - константа единиц измерения времени  

double getCurrentPhaseElapsedTime() - Возвращает время, прошедшее от начала текущей фазы в единицах модельного времени или -1 если светофор выключен.

double getCurrentPhaseElapsedTime(TimeUnits units) - Возвращает время, прошедшее от начала текущей фазы в указанных единицах измерения времени. К примеру, если прошло 15 секунд, то вызов функции getCurrentPhaseElapsedTime(MINUTE) вернет 0.25. Если светофор выключен, функция вернет -1.

Параметр: units - константа единиц измерения времени

double getCurrentPhaseRemainingTime() - Возвращает оставшееся время до конца текущей фазы в единицах модельного времени или -1 если светофор выключен.

double getCurrentPhaseRemainingTime(TimeUnits units) - Возвращает оставшееся время до конца текущей фазы в указанных единицах измерения времени.  К примеру, если оставшееся время составляет 15 секунд, то вызов функции getCurrentPhaseRemainingTime(MINUTE) вернет 0.25. Если светофор выключен, функция вернет -1.

Параметр: units - константа единиц измерения времени

int getPhasesNumber() - Возвращает количество фаз.

int getCurrentPhaseIndex() - Возвращает индекс текущей фазы (нумерация начинается с нуля) или -1 если светофор выключен.

double getPhaseDuration(int index) - Возвращает длительность фазы по ее индексу в единицах модельного времени.

Параметр: index - индекс фазы (0, 1, 2, ...)

double getPhaseDuration(int index, TimeUnits units) - Возвращает длительность фазы по ее индексу в заданных единицах измерения времени. К примеру, чтобы получить длительность второй фазы в секундах, необходимо вызвать функцию getPhaseDuration(1, SECOND)

Параметры: index - phase index (0, 1, 2, ...)
          unitsконстанта единиц измерения времени

List<List<TrafficLightSignal>> getPhaseSignals() - Возвращает двумерный список сигналов, в котором ряд представляет сигнал одной стоп-линии, а столбец - сигнал одной фазы светофора, задаваемый этой стоп-линии.

TrafficLightSignal getCurrentSignal(StopLine stopLine) - Возвращает текущий сигнал для указанной стоп-линии. Возвращает null, если светофор выключен или если он не контролирует эту стоп-линию.

Параметр: stopLine - указанная стоп-линия

TrafficLightSignal getCurrentSignal(RoadLanesConnector roadLaneConnector) - Возвращает текущий сигнал для указанного коннектора дорожных полос или null, если светофор выключен или если он не контролирует этот коннектор дорожных полос.

Параметр: roadLaneConnector - указанный коннектор дорожных полос

List<Agent> getSignalElements() - Возвращает список контролируемых стоп-линий или соединителей полос.

setRoadNetwork(RoadNetwork roadNetwork) - Задает дорожную сеть.

Параметр: roadNetwork - дорожная сеть, которой принадлежит созданный светофор

RoadNetwork getRoadNetwork() - Возвращает дорожную сеть, которой принадлежит контролируемый светофором элемент разметки.