====== Действия ====== Вернёмся к ссылкам. Ссылки в любом тексте вашей игры (точнее, внутри контейнера //page//) по умолчанию перехватываются Salet. Если адрес ссылки не выглядит как внутренняя ссылка (содержит символы ''%%linkRe%%'', чаще всего - ссылка на адрес в интернете), то Salet пропускает эти ссылки и добавляет им класс ''%%raw%%''. Те ссылки, которые Salet всё-таки обрабатывает, могут выглядеть двояко: * ''%%room%%'' - ссылка на **комнату.** Она перемещает игрока в комнату ''%%room%%''. * ''%%./action%%'' - ссылка на **действие.** Она оставляет игрока в текущей комнате, но вызывает действие ''%%action%%''. Действие - это функция, какой-то код, который вызывается, когда игрок переходит по ссылке ''%%./[ID действия]%%'', например, ''%%./action%%''. Действия задаются в свойстве ''%%actions%%'' комнаты: actions: action: () -> salet.view.write "Действие" Обычно действия должны просто выводить какой-то текст. Для этого есть особый вид действий - **писатели.** ==== Писатели ==== Чтобы вывести текст для игрока в обычной функции действия, нужно вызвать функцию ''%%salet.view.write("текст")%%''. **Писатель** - это действие, которое возвращает текст для игрока, чтобы вывести его на экран. Ссылка на писателя выглядит так: ''%%./_writer_[ID действия]%%'', например, ''%%./_writer_action%%''. Писатели задаются в особом свойстве ''%%writers%%'': writers: action: "Действие" Чтобы не писать каждый раз ''%%Ссылка%%'', вы можете объявить функцию и вставлять её в текст (см. код примеров игр на Salet): textlink = (content, ref) -> return "#{content}" ... "Текст и #{textlink("ссылка", "action")} в нём" В обучающей игре эта же функция ещё и добавляет к ссылке класс ''%%once%%'', чтобы запретить нажимать на неё несколько раз подряд. Писатель также может быть функцией, только она всё равно должна возвращать текст. В CoffeeScript к последней строке функции всегда добавляется ''%%return%%'', так что следите за тем, что пишут ваши писатели. ==== Заменители ==== Заменитель - это текст, который заменяет собой текст в определённом блоке с определённым ID (мы говорим о блоках HTML и ID в смысле HTML, ''%%Текст%%''). Заменитель вызывается так: ''%%Ссылка%%'' и находится в том же свойстве ''%%writers%%'': writers: action: "Действие" После нажатия на ссылку текст в блоке с ID ''%%action%%'' заменится на слово "Действие". Заменитель может возвращать функцию, которая возвращает текст для замены. === Циклы === При помощи функций-заменителей можно сделать циклические ссылки, которые перебирают массив своих значений. Например, после щелчка на слово "красивый" показывается слово "обычный", а по щелчку по этой ссылке она меняется на ссылку с текстом "ужасный", которая превращается по следующему щелчку обратно в "красивый". Добавьте в свои комнаты функцию ''%%cyclewriter%%'', которая может выглядеть, например, так: cyclewriter: () -> responses = @cycle if typeof responses == "function" responses = responses() cycleIndex = window.localStorage.getItem("cycleIndex") cycleIndex ?= 0 response = responses[cycleIndex] cycleIndex++ if cycleIndex == responses.length cycleIndex = 0 window.localStorage.setItem("cycleIndex", cycleIndex) return salet.view.cycleLink(response) Этот код предполагает, что в текущей комнате есть свойство ''%%cycle%%'': Salet даёт функцию ''%%salet.view.cycleLink(ref)%%'', которая вызывает заменитель под названием ''%%cyclewriter%%''. room "plaza", salet, cycle: ["странного", "выдающегося", "сумасбродного", "сумасшедшего", "особенного"] dsc: () -> """ Вы поднимаетесь по стене и вылезаете на главную площадь #{salet.view.cycleLink("тихого")} маленького городка. Табличка рядом сообщает, что это город "Иннсмут", где бы это ни было. """ По щелчку на ссылку //"тихого"// прилагательное сменится на слово //"странного"//. Вы можете самостоятельно собрать другие ссылки, например, чтобы не повторять набор снова и снова, а останавливаться на последнем значении. Вы можете переписать ''%%cyclewriter%%'' в вашей комнате или написать полностью свою версию. ==== Вставки ==== Вставка - это функция, которая //добавляет// текст в какой-нибудь определённый HTML блок. Подобно заменителям, они вызываются через ''%%Ссылка%%'' и задаются в свойстве ''%%writers%%''. Вставка ''%%action%%'' будет вставлять текст в блок с ID ''%%action%%''. Вставка может быть задана как текст или функция, которая возвращает текст.