ru:guide:actions

Действия

Вернёмся к ссылкам. Ссылки в любом тексте вашей игры (точнее, внутри контейнера 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: "Действие"

Чтобы не писать каждый раз <a href="./_writer_action">Ссылка</a>, вы можете объявить функцию и вставлять её в текст (см. код примеров игр на Salet):

textlink = (content, ref) ->
  return "<a href='./_writer_#{ref}'>#{content}</a>"

...

"Текст и #{textlink("ссылка", "action")} в нём"

В обучающей игре эта же функция ещё и добавляет к ссылке класс once, чтобы запретить нажимать на неё несколько раз подряд.

Писатель также может быть функцией, только она всё равно должна возвращать текст. В CoffeeScript к последней строке функции всегда добавляется return, так что следите за тем, что пишут ваши писатели.

Заменитель - это текст, который заменяет собой текст в определённом блоке с определённым ID (мы говорим о блоках HTML и ID в смысле HTML, <span id="block">Текст</span>).

Заменитель вызывается так: <a href="./_replacer_action">Ссылка</a> и находится в том же свойстве 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 блок. Подобно заменителям, они вызываются через <a href="./_inserter_action">Ссылка</a> и задаются в свойстве writers.

Вставка action будет вставлять текст в блок с ID action. Вставка может быть задана как текст или функция, которая возвращает текст.

  • ru/guide/actions.txt
  • Последнее изменение: 2021/01/24 10:42
  • 127.0.0.1