Неявный выбор
В обычных "менюшных" играх и книгах-играх все ссылки из одной комнаты в другую должны быть заданы явно.
Если вы хотите предложить несколько вариантов на выбор, вам придётся создавать список самостоятельно, примерно так:
- [Вариант 1](choose1) - [Вариант 2](choose2) - [Вариант 3](choose3)
Если вы хотите добавить новый вариант для выбора, вам придётся отредактировать этот список. А если вам ещё и нужно, чтобы варианты зависели от состояния игры (например, их нельзя было бы выбрать в каком-то случае или они скрывались бы после определённого события), вам пришлось бы писать сложную функцию-ветвление через много вложенных конструкций if
. Но в Salet есть более простой способ.
Каждая комната можеть иметь набор меток (тегов). Например, скажем, что в примере выше комната choose1
помечена меткой left
, а комнаты choose2
и choose3
имеют метку right
.
Кроме того, каждая комната имеет параметр choices
, который является фильтром по тегу. Если выставить параметр choices
в значение right
, то после вывода описания текущей комнаты Salet автоматически просмотрит все комнаты игры и выведет список из двух вариантов, помеченных тегов right
. Текст каждого из этих вариантов определяется параметром optionText
каждой из комнат.
Давайте повторим принцип ещё раз: Salet может автоматически собирать и выводить список из вариантов выбора, если ему указать тег для фильтра и пометить этим тегом все варианты выбора.
Управление автосписком
Каждая комната имеет массив tags
, который содержит метки комнаты. Метка - это обычная строка.
Фильтр choices
- это перечисление комнат или тегов. Перед названием тега ставится символ #
, чтобы показать, что это не название комнаты.
Свойство комнаты optionText
- это текст, который будет выведен в списке вместо простого "Вариант 1". Это свойство может быть функцией.
Свойство комнаты canView
скрывает комнату из автосписка, если оно возвращается как false
. Это свойство может быть функцией.
Свойство комнаты canChoose
не даёт выбрать комнату в списке, если оно возвращается как false
. Оно также может быть функцией.
Свойство maxChoices
ограничивает длину списка.
Свойство priority
сортирует варианты выбора до того, как они будут ограничены длиной maxChoices
, а свойство displayOrder
сортирует их уже после ограничения, для вывода на экран.
Скриншоты
Несколько примеров использования автосписков из игр.
Пример из демо Salet. Простая ссылка.
В этом примере свойство optionText
выставлено в виде HTML. За счёт стилей CSS один из блоков выглядит не похожим на второй.
В этом примере при помощи свойства canView
третий из четырёх вариантов нельзя выбрать.