Тело
- BodySystem всё ещё находится в зачаточном состоянии, многие виды поведения ещё не существуют.
- Если вы — downstream, который полагается на хирургию, многое сломается, если вы перейдёте на новую BodySystem без лёгкой замены на момент написания.
- Поведение органов и BodySystem может измениться по мере её развития. Проверяйте ломающие изменения, когда можете!
Что такое спейсмен? Жалкая маленькая кучка Контейнеров!
Body — это группа нижележащих симуляционных систем, которые управляют мобами человеческой или животной формы в Space Station 14. Разумный торговый автомат не имеет Body. Мёртвая таракамоль — имеет.
Обзор верхнего уровня
Моб в Space Station 14 — это сущность, управляемая игроком или NPC. Таракамоль, разумный торговый автомат и командир Ядерных оперативников — все они мобы. Поведение и способности этого моба определяются компонентами, прикреплёнными к сущности.
Например, моб часто является повреждаемым, то есть может получать урон и отслеживать полученный урон. У мобов также часто есть состояния моба, которые меняют доступные мобу действия в зависимости от полученного урона, а ещё больше мобов являются разрушаемыми, что позволяет уничтожить моба при получении достаточного количества урона определённого типа.
Однако все эти компоненты прикреплены к одной сущности, и вполне реальна вероятность, что мы захотим дать мобу множество поведений, которые не могут быть прикреплены к этой сущности.
BodySystem и связанные с ней компоненты, которые на данный момент включают BodyComponent и VisualBodyComponent, предназначены для обработки этих дополнительных сущностей, позволяя одной сущности фактически состоять из нескольких сущностей с их собственными уникальными поведениями и системами.
В основном это делается через ретрансляторы событий, которые принимают события, поднятые на теле, и передают их органам, содержащимся внутри тела, позволяя этим органам обрабатывать события, предназначенные телу, и расширяя возможности тела. Кроме того, вставка и извлечение органов из тела поднимают собственное событие, которое позволяет нескольким компонентам тела работать вместе.
Что делает BodySystem?
BodySystem в настоящее время находится в зачаточном состоянии после полной переработки с нуля. Если вы привыкли к старой системе, вы обнаружите, что некоторые виды поведения всё ещё отсутствуют, но есть и новые возможности.
Главная сила BodySystem в том, что она позволяет более тонко управлять поведением на основе органов. Ядро BodySystem намеренно простое, чтобы его было легко расширять; каждая сущность, составляющая тело, считается органом и хранится в контейнере body_organs для удобного запроса. Поэтому всё поведение опирается на логику вставки, извлечения и запроса органов в этом контейнере.
По замыслу, в самом BodyComponent очень мало логики, и большинство систем вместо этого прикреплены к органам внутри тела, а некоторые прикреплены к компонентам, которые слушают тело или взаимодействуют с ним.
Например, то, как тело визуализируется, почти полностью выполняется через органы. Любое тело с VisualBodyComponent будет запрашивать органы в теле всякий раз, когда добавляется/удаляется новый орган или изменяется отметина на органе, чтобы собрать спрайт, составляющий сущность тела.
Визуализация тела: VisualBodyComponent
- Ниже мы видим тело, построенное из нескольких органов с несколькими отметинами
- Каждая отметина прикреплена к органу, а не к самому телу.
Любой орган, вносящий вклад в спрайт тела, будет иметь VisualOrganComponent, который предоставляет данные для спрайта и визуализации этого органа. Органы также могут хранить отметины, которыми управляет VisualOrganMarkingsComponent, который тоже самодостаточен: он обрабатывает спрайты, слои и то, когда скрывать отметины в ответ на экипировку предметов инвентаря.
Всё поведение обрабатывается этими органами, а VisualBodyComponent существует только для того, чтобы при необходимости отправлять данные этим органам и обозначать, что тело способно принимать изменения спрайта от органов, хранящихся внутри тела.
Что делают органы?
Органы, как указано выше, выступают сущностями, которые обрабатывают события для тела. Поскольку тело намеренно простое, именно в органах заключена основная сложность системы. Существует множество различных компонентов для органов, и список будет расширяться по мере дальнейшего развития системы тела, но все они следуют одной и той же логике. Тело получает событие, это событие передаётся органам, компонент органа получает событие и обрабатывает его одной из своих систем.
Например, тело имеет компонент-респиратор, что означает необходимость дышать. Тело выполняет метод Inhale(), который получает воздушную смесь из окружающей среды. Затем эта смесь через событие поднимается к телу, которое отправляет её органам; орган тела забирает этот газ, сохраняет его в собственной газовой смеси, а затем обрабатывает событие. Позже эта газовая смесь метаболизируется лёгкими, что увеличивает насыщение компонента-респиратора тела, не давая телу задохнуться.
Цель тела — заставить все системы работать таким образом: тело нуждается в чём-то, поэтому оно поднимает событие, которое может быть обработано органами, или, в случае сущности без тела, обработано ею самой через другой компонент.
Что отсутствует?
На данный момент самым большим отсутствующим элементом BodySystem на момент написания является полноценная система связей. Части помещаются в тело и выполняют поведения, но сейчас нет ни компонента, ни системы, определяющей структуру и проверяющей поведения, как нет и простого способа упорядочить взаимодействие определённых органов друг с другом. И то, и другое будет опираться на расширяемую систему связей сущностей, которая ещё не построена.