Переключатель

объект Переключатель; SwitchReactor

Переключатель необходим для создания условий в сценариях приложения. Он имеет собственный тип блока в сценариях, в котором перечисляются опции, заданные пользователем.

switch_review_img

Обзор возможностей

Параметр Описание
Список опций (options) Список опций, определенный пользователем.
Опция по умолчанию (currentOptionIndex) Опция, выбранная в качестве активной при запуске программы.
параметр Список опций; options

Список опций, определенный пользователем. Опции можно добавить, переименовать или удалить.

параметр Опция по умолчанию; currentOptionIndex

Опция, выбранная в качестве активной. Если выбрано значение «Не определено», по умолчанию активной будет выбрана первая опция из списка.

Работа с переключателем

Приведенный ниже проект доступен на GitHub.

Выбор активной опции

В один переключатель можно добавить любое количество опций, но в качестве активной одновременно может быть выбрана только одна. Чтобы во время работы программы сделать какую-либо опцию активной, необходимо в сценарии привести соединение к желаемой опции слева.

switch_usage_select_img

В приведенном выше примере при нажатии на определенную кнопку, каждая из которых представлена объектом типа Текст (TextReactor), происходит выбор соответствующей опции в качестве активной.

Ветвления

При обработке соединения, приходящего сверху в элемент переключателя, происходит проверка текущей активной опции. Если в элемент присутствует активная опция, выполняется обработка соединений, выходящих из нее справа. Если таких соединений нет, ничего не происходит.

На приведенном ниже сценарии при нажатии на Текст (TextReactor) «Проверка» происходит проверка текущей опции. Если текущая опция - «Ответ A», то появляется Текст (TextReactor) «Правильно!», в противном случае появиться Текст (TextReactor) «Неверно!».

switch_usage_process_img

Особенности использования в сценарии

У объекта переключатель есть важное отличие от других объектов. Соединения, исходящие справа из опций данного элемента будут обработаны, только в том случае, если к данному элементу сверху приведено соединение проверки текущей активной опции. Таким образом, сценарий приведенный ниже работать не будет!

switch_usage_mistake_img

Здесь проверка активной опции переключателя «Switch | Переключатель» приходит в одном экземпляре элемента, а соединения, соответствующие различным опциям, исходят из опций, добавленных в другой экземпляр элемента того же переключателя «Switch | Переключатель». В таком случае при проверке активной опции ничего не произойдет.

Advanced

Пример кода:

local switch = reactorController:getReactorByName("Switch")
local image = reactorController:getReactorByName("Image")
local timer = reactorController:getReactorByName("Timer")

timer:subscribeEvent("onAlarm", function()
    switch.currentOptionIndex = 2 -- явно устанавливаем индекс выбранной опции, например, по таймеру
end)

timer:start(3, "once")

bus:subscribe(function()
    if switch.currentOptionIndex == 2 then
        image:show()
    end
end)