Архитектура библиотеки

Концепт архитектуры сверху
Достаточно сложно предложить универсальную архитектуру для достаточно большой группы игр. Поэтому с самого верхнего уровня мы выделяем только абстрактные концепты на которые можно разделить игру:
-
Мир игры (World) - это всё пространство игры, всё что может существовать в игре. Это самая верхняя иерархия.
-
Общество (Society) - это все взаимосвязи между персонажами и их отношение к миру. Это часть мира.
-
Задачи игрока и ботов (PlayerJob + RobotJob -> Job) - это фоновые задачи, которые выполняют все активные персонажи в игре и котроль выполнения этих задач. Это часть общества.
-
Бизнесс (Business) - это здания или логические точки на карте, для которых важно размещение в пространстве мира игры и контроль над ним общества. Это часть общества, но размещенная в мире.
-
Панель (RunPanel) - это пример пользовательского интерфейса (UI), который запускает или останавливает игровое время и движение правил общества, которые изменяют мир.
Мы не навязываем необходимость думать о своей игре в этом концепте и в этих терминах, но это сильно облегчит понимание и принятие всей архитектуры в целом, что в свою очередь позволит повторно использовать библиотеку.
На изображении мы выделили желтым цветом те классы, которые имеют обе части (логику и визуализацию), зеленным только те которые имеют исключительно логику, а красным только то, что визуализируется. В разделе "Отделение логики игры от Unity" это будет объяснено подробнее.
Границы применимости
Если переопределить термины так:
-
Business → AgentPoint (любая сущность, размещённая в мире и имеющая поведение)
-
Society → InteractionSystem (система правил взаимодействия между AgentPoint)
-
Job → Process (любой фоновый или активный процесс, изменяющий состояние мира)
-
World → Container (контейнер всех сущностей и их состояний)
Тогда архитектура становится универсальной моделью для почти любой игры, потому что:
-
Невозможно представить игру без сущностей в мире (AgentPoint)
-
Если есть сущности — есть правила их взаимодействия (InteractionSystem)
-
Если есть взаимодействия — есть процессы (Process), которые можно автоматизировать
Но предметные, а не абстрактные термины направляют мышление разработчика в сторону: агентов с автономией, социальных/экономических связей, задач и фоновой симуляции. Это полезно, если вы делаете игру про общество, контроль, экономику, агентов. Для квантового симулятора это менее интуитивно, но формально применимо.
Игры, где концепт лежит идеально (здесь Business — это реальные здания, Society — отношения жителей, Job — их повседневные задачи):
-
Городские симуляторы (Cities: Skylines)
-
Экономические стратегии (Factorio, Anno)
-
RPG с системой поселений (Fallout 4)
-
Симы с автономными персонажами (The Sims, RimWorld)
-
Тактические игры (Jagged Alliance, XCOM)
Игры, где концепт нужно “натягивать”:
-
Чистые головоломки (Portal, Tetris)
-
Аркады (Space Invaders)
-
Визуальные новеллы (без механик управления)
-
Чистый аркадный шутер без экономики и ботов (Geometry Wars)
Предметно-ориентированный каркас
Такие движки как Unity предоставляют только низкоуровневые понятия, поэтому даже такой простенький концепт с такими границами применения полезен тем, что формулирует именно предметную архитектуру высокого уровня. Это позволяет детализировать концепт, и предоставить библиотеки с базовой функциональностью.
Преимущества такого подхода:
-
Сквозная архитектура — одни и те же концепты от дизайна до кода
-
Повторное использование — готовые системы для экономики, AI, торговли
-
Быстрый старт — можно собрать прототип стратегии с минимальной настройкой и почти без кодирования
-
Единая ментальная модель — дизайнеры, программисты и геймдизайнеры говорят на одном языке
-
Расширяемость — можно добавлять новые типы Business, Job, не ломая ядро
Детализация архитектуры

На этой диаграмме показаны уже классы Tac-библиотек, которые помогают реализовать представленный концепт.