Неявный выбор

В обычных "менюшных" играх и книгах-играх все ссылки из одной комнаты в другую должны быть заданы явно.

Если вы хотите предложить несколько вариантов на выбор, вам придётся создавать список самостоятельно, примерно так:

- [Вариант 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 третий из четырёх вариантов нельзя выбрать.

  • ru/guide/implicit.txt
  • Последние изменения: 2016/12/09 16:19
  • Alexander Yakovlev