Этот туториал — часть серии Начало работы — День 1, Неделя 3.
Проблема: балансировка затрагивает много файлов
На прошлой неделе вы превратили дизайн в граф: карты способностей хранят Владельца-персонажа, враги содержат таблицы добычи, ссылающиеся на карты, которые из них выпадают, а каждый элемент наследует от базового объекта. Теперь мы должны настроить числа так, чтобы все они вместе ощущались целостно - в балансировке нужно уметь смотреть на картину целостно.
Вы не редактируеете одну карту. Вы настраиваете колоду. Сегодняшняя задача — выровнять десятки карт друг относительно друга, и любой вывод о колоде (например, «Огнетушитель бьёт слишком сильно для своей стоимости») требует видеть несколько карт одновременно.
Ещё вчера это означало бы муторную правку каждого объекта. Тридцать карт, тридцать файлов, а чтобы сопоставить карты нужно было "загрузить" их все к себе в память

Коллекция — это те же данные, отображаемые как таблица
Основная идея проста: коллекция — это ваши данные геймдизайна, отображаемые как таблица. Карта колоды - это обычно один элемент, который вы открываете и редактируете, коллекция показывает много карт сразу: одна строка на карту, а нужные поля — как колонки.
Каждая строка — это реальный элемент. Это не копия, не снимок и не список значений, хранящийся отдельно от геймдизайна. Карта, которую вы видите строкой в таблице, — это тот же .ima.json файл на диске, который вы иначе открывали бы по одному. Откройте строку — и увидите карту полностью. Измените строку — и вы измените карту.
В этом и есть весь фокус: вы получаете готовую таблицу, не покидая систему, где хрянятся все данные, разложенные по полочкам для работы с балансом.
Создайте коллекцию и задайте ей тип
В дереве проекта создайте новое рабочее пространство — тем же способом, что и папку — и переключите его с Папка на Коллекция. Дайте имя и выберите тип. Для колоды: назовите её Карты и выберите базовый объект Игровая карта как тип коллекции.
Карты, которые уже есть в проекте, перетащите в коллекцию в дереве слева: это переместит сами элементы (тот же .ima.json на диске, а не копию), и они сразу появятся строками в таблице.

Благодаря тому, что у коллекции есть тип, все строки представляют собой одну структуру. Вы не можете случайно добавить строку без Урона или написать название свойства Стоимость иначе — схему фиксирует тип Игровая карта, тот самый, что вы создали на второй неделе. Колонки в таблице образуются прямо из полей типа.
Колонки приходят из типа
Таблица показывает колонки полей, объявленных типом Игровая карта:
- Имя (Строка)
- Стоимость (Целое число)
- Урон (Число)
- Легендарная (Флажок)
Каждая ячейка — это значение карты для этого поля. И тут мы снова получаем пользу от многоуровневого наследования, которое использовали в среду: в колоде есть и карты-предметы (Гантель, Газировка, Аптечка), и карты способностей (принадлежат одному персонажу — Дымовая завеса Дмитрия), но обе наследуют одну базу Игровой карты. Поэтому оба вида появляются строками в одной таблице, с одинаковыми колонками, сопоставимые друг с другом.

Правка сразу в нескольких картах происходит одновременно
Разница с подходом «один файл за раз» проявляется в момент правки. Измените Урон Банановой кожуры с 1 на 2, поправьте Стоимость Огнетушителя, отметьте Тележку для покупок как легендарную — всё в таблице, не открыв ни одного файла.
Таблица помечает изменённое, когда вы нажмёте Сохранить, все изменения записываются на диск - одно действие вместо тридцати отдельных редактирований и сохранений. Благодаря тому, что каждая строка - реальный элемент, все изменения тут же появляются в тех же самых файлах, которые читает движок.
Строки — это элементы: добавление и удаление
Правило «строка = элемент» продолжает приносить свои плоды:
- Добавить строку создаёт новый реальный элемент карты - настоящий
.ima.jsonна диске, который остается только переименовать и настроить. - Удалить строку (выделите её и нажмите Delete или используйте контекстное меню) удаляет сам элемент. Действие удалит сам файл на диске, поэтому предварительно уточнит Ваше решение.
Все это позволит вам не только править существующие данные - вы можете прямо в таблице пополнять и урезать колоду.
Таблица баланса и геймдизайн не смогут разойтись
Коллекции один из самых сильных инструментов для борьбы с рассинхроном.
Теперь коллекция Карты и есть ваша таблица баланса. Каждая строка подразумевает под собой настоящий объект - карту, каждая колонка — настоящее поле, каждое сохранение пишет в те же файлы, которые загружает движок. Чуть позже нам это очень поможет в экспорте проекта.
Далее: сохраните вид под задачу
Таблица определенно выигрывает у тридцати разрозненных файлов! Но у каждого процесса своя специфика. Если при проверке урона нужен строгий набор колонок, то для проверки стоимости — совершенно иной, а для финального показа лишние столбцы и вовсе не пригодятся. Что делаем завтра: добавляем кастомные виды - вы сможете создавать под каждую задачу свое идеальное представление на базе одного массива данных.
Готовы увидеть весь баланс сразу? Скачайте IMS Creators, откройте ims.cr5.space/desktop, создайте коллекцию с типом Игровая карта и балансируйте всю колоду в одной таблице уже сегодня.
FAQ
Строки в коллекции создают настоящие файлы?
Да. Каждая строка - реальный элемент: .ima.json файл на диске внутри проекта. Добавление строки создаёт новый элемент, а правка ячейки строки пишет в этот элемент. Таблица - представление реальных данных дизайна, а не отдельная копия.
Зачем нужен тип коллекции?
Тип объявляет схему, общую для каждого элемента коллекции. Коллекция показывает только элементы выбранного типа, а колонки таблицы из полей выбранного типа — значит, строка не сможет допустить поле или определить его иначе. Вы выбираете тип при создании коллекции, из своих базовых объектов.
Может ли коллекция содержать разные виды элементов?
Нет. Коллекция типизирована — все строки содержат определённую структуру, это ограничение делает массовую таблицу безопасной для правок. Нужен другой вид - создайте другую коллекцию. (В примере с колодой карты-предметы и карты способностей используют один базовый тип Игровая карта, поэтому обе помещаются в одну коллекцию Карты.)
Правки сохраняются сразу при вводе в таблицу?
Правки ставятся в очередь и помечаются в таблице, пока вы не сохраните. Одно «Сохранить» коммитит всю пачку изменённых строк за раз, а не по одному сохранению на файл. Откат неудачного изменения происходит одним нажатием.
Удаление строки удаляет настоящий элемент?
Да. Удаление строки убирает реальный элемент с диска, поэтому приложение просит подтверждение.
Можно ли использовать коллекцию не только для баланса?
Да — везде, где нужно много похожих элементов на одном экране: проверить скорость каждого врага, сравнить стоимость карт, просмотреть структуру по всему набору. Таблица — универсальный способ работы с набором однотипных элементов, а баланс — просто самый очевидный случай.