====== Действия ======
Вернёмся к ссылкам. Ссылки в любом тексте вашей игры (точнее, внутри контейнера //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%%''. Вставка может быть задана как текст или функция, которая возвращает текст.