89 lines
6.0 KiB
Markdown
89 lines
6.0 KiB
Markdown
# Interactive Base — то, по чему можно щёлкнуть в сцене
|
||
|
||
Interactive Base добавляет в картинки-сцены кликабельные объекты: вещь, лежащую на земле, дверь, место «за склепом». У объекта может быть своя картинка поверх фона, он может подсвечиваться под курсором, а клик по нему запускает сценарий. Сценарии добавляют и убирают объекты по ходу истории.
|
||
|
||
Interactive Base использует пролог Cthangover. Тайловые карты RPG World вместо этого работают со своими событиями.
|
||
|
||
## В игре
|
||
|
||
В начале Cthangover в переулке у велосипеда лежит красная тряпка. Она — не часть фона: это интерактивный объект со своей картинкой.
|
||
|
||

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

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

|
||
|
||
## Интерактивный объект
|
||
|
||
Объекты — это JSON-файлы в папке `interactives/` мода. Вот тряпка с картинок (из Cthangover), контур в ней сокращён:
|
||
|
||
```json
|
||
{
|
||
"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` выполняют сценарные команды.
|
||
|
||
## Как объекты попадают в сцену
|
||
|
||
Само по себе описание нигде не появляется. Объект добавляет сценарий сцены, а убирает обычно сценарий клика:
|
||
|
||
```scenario
|
||
interactive_add cloak_ground
|
||
interactive_remove cloak_ground
|
||
```
|
||
|
||
При смене сцены объекты очищаются, поэтому Cthangover добавляет их заново при каждом входе — сценарием сцены, который проверяет сюжет:
|
||
|
||
```scenario
|
||
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. **Объект возвращается после того, как его взяли.** Сценарий, который его добавляет, должен проверять тот же тег или флаг, который ставит сценарий клика.
|