Files

6.0 KiB
Raw Permalink Blame History

Interactive Base — то, по чему можно щёлкнуть в сцене

Interactive Base добавляет в картинки-сцены кликабельные объекты: вещь, лежащую на земле, дверь, место «за склепом». У объекта может быть своя картинка поверх фона, он может подсвечиваться под курсором, а клик по нему запускает сценарий. Сценарии добавляют и убирают объекты по ходу истории.

Interactive Base использует пролог Cthangover. Тайловые карты RPG World вместо этого работают со своими событиями.

В игре

В начале Cthangover в переулке у велосипеда лежит красная тряпка. Она — не часть фона: это интерактивный объект со своей картинкой.

Переулок в начале Cthangover: велосипед у стены и свисающая с него красная тряпка; справа вверху — панель инструментов.

Когда курсор оказывается над тряпкой, он превращается в руку, а тряпка приобретает лёгкий золотистый оттенок:

Тряпка без курсора и с курсором поверх; справа она чуть теплее по тону.

Клик запускает сценарий тряпки: Марао поднимает её, а сценарий убирает объект со сцены.

После клика: портрет Марао и первая строка сценария тряпки в окне диалога.

Интерактивный объект

Объекты — это JSON-файлы в папке interactives/ мода. Вот тряпка с картинок (из Cthangover), контур в ней сокращён:

{
  "Items": [
    {
      "id": "cloak_ground",
      "texture": "cloak_ground",
      "layer": "foreground",
      "zIndex": 5,
      "cursor": "PointingHand",
      "hitArea": {
        "type": "polygon",
        "vertices": [
          { "x": 0.2796, "y": 0.7318 }, { "x": 0.3207, "y": 0.7167 },
          { "x": 0.3456, "y": 0.8434 }, { "x": 0.3387, "y": 0.8872 }
        ]
      },
      "highlight": { "color": "#FFD70044", "scale": 1, "duration": 0.12 },
      "actions": {
        "onClick": { "scenario": "scenarios/prolog/morning_cloak.scenario" }
      }
    }
  ]
}
  • texture — картинка размером во весь экран, прозрачная везде, кроме самого объекта, поэтому с фоном она совмещается сама. Уберите её, если нужен невидимый участок.
  • hitArea — где объект можно щёлкать, в долях экрана (0–1): rect с x, y, width, height; circle с x, y, radius; или polygon с vertices.
  • layer — background или foreground; оба — часть картинки и остаются под окном диалога, панелью инструментов и панелями. ui рисуется поверх всего.
  • zIndex — порядок среди объектов одного слоя: большее число рисуется сверху.
  • cursor — курсор мыши над объектом, например PointingHand.
  • highlight — подсветка, пока курсор над объектом: color (с прозрачностью), scale и duration появления в секундах.
  • enabled, visible — реагирует ли объект и рисуется ли он поначалу.
  • actions — onClick запускает файл scenario или commands прямо в строке; onHoverEnter и onHoverLeave выполняют сценарные команды.

Как объекты попадают в сцену

Само по себе описание нигде не появляется. Объект добавляет сценарий сцены, а убирает обычно сценарий клика:

interactive_add cloak_ground
interactive_remove cloak_ground

При смене сцены объекты очищаются, поэтому Cthangover добавляет их заново при каждом входе — сценарием сцены, который проверяет сюжет:

scene: prolog_alley
priority: 15
condition: AwakeningQuest.notHasTag("cloak_taken") && AwakeningQuest.notHasTag("book_taken")
---
interactive_add cloak_ground
interactive_add book_ground
end

Добавление объекта, который уже есть, ничего не делает, поэтому повторять это безопасно.

Расставить объекты и нарисовать их области клика можно и в интерактивном редакторе Editor Tools.

Если что-то пошло не так

  1. Клик ни к чему не приводит. Объект ни разу не добавлялся в этой сцене, у него выключен enabled, либо клик пришёлся мимо hitArea.
  2. Картинка стоит не на месте. Текстура должна быть картинкой во весь экран, совпадающей с фоном, а не маленькой вырезкой.
  3. Объект возвращается после того, как его взяли. Сценарий, который его добавляет, должен проверять тот же тег или флаг, который ставит сценарий клика.