Хватит тратить время на каждый файл. Отредактируйте всю коллекцию в одной таблице.

Забудьте о рутинной балансировке. Коллекция переносит все данные в единую таблицу: одна строка — одна карта. Вносите любые изменения и применяйте их ко всей пачке карт всего за одно сохранение

Этот туториал — часть серии Начало работы — День 1, Неделя 3.

Проблема: балансировка затрагивает много файлов

На прошлой неделе вы превратили дизайн в граф: карты способностей хранят Владельца-персонажа, враги содержат таблицы добычи, ссылающиеся на карты, которые из них выпадают, а каждый элемент наследует от базового объекта. Теперь мы должны настроить числа так, чтобы все они вместе ощущались целостно - в балансировке нужно уметь смотреть на картину целостно.

Вы не редактируеете одну карту. Вы настраиваете колоду. Сегодняшняя задача — выровнять десятки карт друг относительно друга, и любой вывод о колоде (например, «Огнетушитель бьёт слишком сильно для своей стоимости») требует видеть несколько карт одновременно.

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

Один редактор карты в приложении с одним блоком Свойства

Коллекция — это те же данные, отображаемые как таблица

Основная идея проста: коллекция — это ваши данные геймдизайна, отображаемые как таблица. Карта колоды - это обычно один элемент, который вы открываете и редактируете, коллекция показывает много карт сразу: одна строка на карту, а нужные поля — как колонки.

Каждая строка — это реальный элемент. Это не копия, не снимок и не список значений, хранящийся отдельно от геймдизайна. Карта, которую вы видите строкой в таблице, — это тот же .ima.json файл на диске, который вы иначе открывали бы по одному. Откройте строку — и увидите карту полностью. Измените строку — и вы измените карту.

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

Создайте коллекцию и задайте ей тип

В дереве проекта создайте новое рабочее пространство — тем же способом, что и папку — и переключите его с Папка на Коллекция. Дайте имя и выберите тип. Для колоды: назовите её Карты и выберите базовый объект Игровая карта как тип коллекции.

Карты, которые уже есть в проекте, перетащите в коллекцию в дереве слева: это переместит сами элементы (тот же .ima.json на диске, а не копию), и они сразу появятся строками в таблице.

Диалог создания коллекции: переключатель Папка/Коллекция в положении Коллекция, имя Карты и Тип, указывающий на базовый объект Игровая карта

Благодаря тому, что у коллекции есть тип, все строки представляют собой одну структуру. Вы не можете случайно добавить строку без Урона или написать название свойства Стоимость иначе — схему фиксирует тип Игровая карта, тот самый, что вы создали на второй неделе. Колонки в таблице образуются прямо из полей типа.

Колонки приходят из типа

Таблица показывает колонки полей, объявленных типом Игровая карта:

  • Имя (Строка)
  • Стоимость (Целое число)
  • Урон (Число)
  • Легендарная (Флажок)

Каждая ячейка — это значение карты для этого поля. И тут мы снова получаем пользу от многоуровневого наследования, которое использовали в среду: в колоде есть и карты-предметы (Гантель, Газировка, Аптечка), и карты способностей (принадлежат одному персонажу — Дымовая завеса Дмитрия), но обе наследуют одну базу Игровой карты. Поэтому оба вида появляются строками в одной таблице, с одинаковыми колонками, сопоставимые друг с другом.

Таблица коллекции Карты со строкой на карту и колонками Имя, Стоимость, Урон, Легендарная

Правка сразу в нескольких картах происходит одновременно

Разница с подходом «один файл за раз» проявляется в момент правки. Измените Урон Банановой кожуры с 1 на 2, поправьте Стоимость Огнетушителя, отметьте Тележку для покупок как легендарную — всё в таблице, не открыв ни одного файла.

Таблица помечает изменённое, когда вы нажмёте Сохранить, все изменения записываются на диск - одно действие вместо тридцати отдельных редактирований и сохранений. Благодаря тому, что каждая строка - реальный элемент, все изменения тут же появляются в тех же самых файлах, которые читает движок.

Строки — это элементы: добавление и удаление

Правило «строка = элемент» продолжает приносить свои плоды:

  • Добавить строку создаёт новый реальный элемент карты - настоящий .ima.json на диске, который остается только переименовать и настроить.
  • Удалить строку (выделите её и нажмите Delete или используйте контекстное меню) удаляет сам элемент. Действие удалит сам файл на диске, поэтому предварительно уточнит Ваше решение.

Все это позволит вам не только править существующие данные - вы можете прямо в таблице пополнять и урезать колоду.

Таблица баланса и геймдизайн не смогут разойтись

Коллекции один из самых сильных инструментов для борьбы с рассинхроном.

Теперь коллекция Карты и есть ваша таблица баланса. Каждая строка подразумевает под собой настоящий объект - карту, каждая колонка — настоящее поле, каждое сохранение пишет в те же файлы, которые загружает движок. Чуть позже нам это очень поможет в экспорте проекта.

Далее: сохраните вид под задачу

Таблица определенно выигрывает у тридцати разрозненных файлов! Но у каждого процесса своя специфика. Если при проверке урона нужен строгий набор колонок, то для проверки стоимости — совершенно иной, а для финального показа лишние столбцы и вовсе не пригодятся. Что делаем завтра: добавляем кастомные виды - вы сможете создавать под каждую задачу свое идеальное представление на базе одного массива данных.

Готовы увидеть весь баланс сразу? Скачайте IMS Creators, откройте ims.cr5.space/desktop, создайте коллекцию с типом Игровая карта и балансируйте всю колоду в одной таблице уже сегодня.


FAQ

Строки в коллекции создают настоящие файлы?

Да. Каждая строка - реальный элемент: .ima.json файл на диске внутри проекта. Добавление строки создаёт новый элемент, а правка ячейки строки пишет в этот элемент. Таблица - представление реальных данных дизайна, а не отдельная копия.

Зачем нужен тип коллекции?

Тип объявляет схему, общую для каждого элемента коллекции. Коллекция показывает только элементы выбранного типа, а колонки таблицы из полей выбранного типа — значит, строка не сможет допустить поле или определить его иначе. Вы выбираете тип при создании коллекции, из своих базовых объектов.

Может ли коллекция содержать разные виды элементов?

Нет. Коллекция типизирована — все строки содержат определённую структуру, это ограничение делает массовую таблицу безопасной для правок. Нужен другой вид - создайте другую коллекцию. (В примере с колодой карты-предметы и карты способностей используют один базовый тип Игровая карта, поэтому обе помещаются в одну коллекцию Карты.)

Правки сохраняются сразу при вводе в таблицу?

Правки ставятся в очередь и помечаются в таблице, пока вы не сохраните. Одно «Сохранить» коммитит всю пачку изменённых строк за раз, а не по одному сохранению на файл. Откат неудачного изменения происходит одним нажатием.

Удаление строки удаляет настоящий элемент?

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

Можно ли использовать коллекцию не только для баланса?

Да — везде, где нужно много похожих элементов на одном экране: проверить скорость каждого врага, сравнить стоимость карт, просмотреть структуру по всему набору. Таблица — универсальный способ работы с набором однотипных элементов, а баланс — просто самый очевидный случай.

Назад к блогу