Переключатель¶
Содержание
-
объект
Переключатель;
SwitchReactor
¶
Переключатель необходим для создания условий в сценариях приложения. Он имеет собственный тип блока в сценариях, в котором перечисляются опции, заданные пользователем.
Обзор возможностей¶
Параметр | Описание |
---|---|
Список опций (options) | Список опций, определенный пользователем. |
Опция по умолчанию (currentOptionIndex) | Опция, выбранная в качестве активной при запуске программы. |
-
параметр
Список опций;
options
¶ Список опций, определенный пользователем. Опции можно добавить, переименовать или удалить.
-
параметр
Опция по умолчанию;
currentOptionIndex
¶ Опция, выбранная в качестве активной. Если выбрано значение «Не определено», по умолчанию активной будет выбрана первая опция из списка.
Работа с переключателем¶
Приведенный ниже проект доступен на GitHub.
Выбор активной опции¶
В один переключатель можно добавить любое количество опций, но в качестве активной одновременно может быть выбрана только одна. Чтобы во время работы программы сделать какую-либо опцию активной, необходимо в сценарии привести соединение к желаемой опции слева.
В приведенном выше примере при нажатии на определенную кнопку, каждая из которых представлена объектом типа Текст (TextReactor), происходит выбор соответствующей опции в качестве активной.
Ветвления¶
При обработке соединения, приходящего сверху в элемент переключателя, происходит проверка текущей активной опции. Если в элемент присутствует активная опция, выполняется обработка соединений, выходящих из нее справа. Если таких соединений нет, ничего не происходит.
На приведенном ниже сценарии при нажатии на Текст (TextReactor) «Проверка» происходит проверка текущей опции. Если текущая опция - «Ответ A», то появляется Текст (TextReactor) «Правильно!», в противном случае появиться Текст (TextReactor) «Неверно!».
Особенности использования в сценарии¶
У объекта переключатель есть важное отличие от других объектов. Соединения, исходящие справа из опций данного элемента будут обработаны, только в том случае, если к данному элементу сверху приведено соединение проверки текущей активной опции. Таким образом, сценарий приведенный ниже работать не будет!
Здесь проверка активной опции переключателя «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)