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