- Мощная
- Ориентированная на данные
- Управляемая событиями
- Тьюринг-полная
- Одобрено PJB1
- Основана на теории графов и AI Pathfinding
- Написана тем же нёрдом, который принёс вам atmos и botany :^)
TODO Индекс
- Введение в Construction Graphs
- Объяснение концепции графов, узлов, рёбер и шагов.
- Написание и Проектирование Construction Graphs
- Объяснение того, как писать и проектировать хороший граф.
- Список шагов, действий и условий.
- Написание начальных конструкций.
- Объяснение ограничений.
- Как Добавить Пользовательские Шаги
- Внутреннее Устройство Системы Construction
- Общий обзор того, как construction работает внутри.
Граф конструкции
Эта система строительства основана на убеждении, что любая сложная конструкция в игре может быть определена как граф взаимосвязанных состояний, или узлов. Цель этой системы — облегчить проектирование и создание новых сложных взаимодействий (конструкций) между сущностями, радикально сокращая объём кода, необходимого для их реализации. Графы состоят из узлов и связей между ними, называемых рёбрами. Граф конструкции ‘Girder’Узлы
Узлы представляют текущее состояние сущности. Сущность, имеющая граф конструкции, всегда будет находиться в одном из узлов и может перемещаться между ними при определённых обстоятельствах, определяемых рёбрами.Узлы и прототипы сущностей
Узлы могут указывать ID прототипа сущности. Сущность, прибывшая в узел, который указывает прототип, отличный от её текущего, будет удалена, а указанный прототип сущности будет создан на её месте. Когда это происходит, все контейнеры, принадлежащиеConstructionComponent сущности, будут перенесены в новую сущность.
Указанный прототип сущности ОБЯЗАТЕЛЬНО должен иметь
ConstructionComponent с правильным графом и узлом.Действия
Вы можете указать действия, которые будут выполнены при прибытии сущности в узел (независимо от того, прибыла ли она по ребру или была создана, уже находясь в узле). Чтобы создать новое, нужно просто создать C# класс, реализующийIGraphAction.
Действия могут делать что угодно: от создания другого прототипа до удаления самой сущности.
Рёбра
Рёбра — это связи или переходы между узлами. Они определяют взаимодействия, необходимые для перехода сущности из одного узла в другой.Завершённые действия
Вы можете указать действия, которые будут выполнены после завершения ребра, непосредственно перед тем, как сущность достигнет нового узла. Используются те же классы, что и для действий узлов, черезIGraphAction. Вы можете создавать новые, реализуя этот интерфейс в новом C# классе.
Условия
Вы также можете указать условия, которые должны быть выполнены, чтобы ребро стало доступным. Все они будут проверены до начала и во время прохождения ребра. Вы можете создавать пользовательские действия, создав новый C# класс, реализующийIEdgeCondition.
Шаги
Шаги — это взаимодействия, необходимые для перехода сущности из одного узла в другой по ребру. Ребро может указывать столько шагов, сколько требуется.Tool step
Этот шаг требует использования инструмента с правильным качеством (quality) на сущности.Material step
Этот шаг требует вставки произвольного количества материала в сущность. Он работает разделением стопок материалов.Component step
Этот шаг требует вставки сущности с определённым компонентом. Использование этого шага не запрещается, но в большинстве случаев рекомендуется использовать теги.Tag step
Этот шаг требует вставки сущности с определённым тегом.Multiple Tags step
Этот шаг требует вставки сущности с набором тегов, указанных вallTags и anyTags. allTags действует как И, а anyTags — как ИЛИ. Вы сможете вставлять только те сущности, которые удовлетворяют обоим требованиям. Вы можете указать только одно из двух или оба сразу.
Контейнеры
Любой шаг, требующий от пользователя внесения предмета в конструкцию (material, prototype и component шаги), может сохранить внесённый предмет в именованный контейнер на сущности. Когда сущность изменяется при достижении узла с другим прототипом сущности, все эти контейнеры будут перенесены в новую сущность. Система construction позволяет использовать этот сохранённый предмет для любых целей, таких как извлечение данных из компонента сохранённого предмета для различных эффектов (см. граф конструкции компьютера) или просто для того, чтобы ‘сохранить’ и позже вернуть тот же самый предмет, который внёс пользователь.Прототип графа конструкции
Ниже вы найдёте пример графа конструкции с документацией для обучения написанию графов. Примеры из реального мира смотрите в прототипах графов в коде игры.Прототип рецепта конструкции
Для указания рецептов конструирования/крафта в меню строительства нужно написать прототипы construction.Начальная конструкция
Что происходит, когда вы пытаетесь скрафтить предмет или начать строительство призрака конструкции? Система construction попытается найти путь от начального узла к целевому узлу. Этот первый шаг в конструировании очень особенный. У него есть некоторые ограничения, которых нет у обычных рёбер. Например, tool steps не разрешены, а условия рёбер не проверяются. По этой причине вы должны проектировать свой начальный узел так, чтобы он имел чёткие, простые рёбра без этих запрещённых функций. Завершённые действия шагов и рёбер, однако, разрешены. Все они будут выполнены одновременно при успешном конструировании. TODO: Перенести это в объяснение меню строительства.Construction условия
Construction условия должны быть C# классами в проекте Shared content. Они реализуютIConstructionCondition.
TODO: Перечислить все текущие construction условия.
Меню строительства
TODO: Перенести объяснение прототипа construction сюда. TODO: Объяснить узел ‘start’ и использовать пример графа стеклянного листа.Призраки конструкции
TODO: Объяснить начальную конструкцию должным образом.Крафт
TODO: Объяснить, как работают графы крафта предметов.Footnotes
- PJB действительно вонючий. ↩