Я также исследую это и придумала несколько решений, которые могут быть быстрыми и ненавязчивыми.
Цель наличия основанного на компонентах приложения состоит в том, что вы можете добавлять и удалять компоненты в любое время во время выполнения и практически или вообще без связи; компоненты могут сосуществовать, даже не зная друг о друге.
Итак, как компонент "рендеринга" узнает, где он должен рендериться или хуже, что он должен рендерить?
Мой ответ заключается в том, что каждый компонент-брат имеет доступ к общей таблице свойств, хранящихся в их контейнере (обычно это игровая сущность или игровой объект)
Например, предположим, что игровой объект с компонентом движения, компонентом рендеринга и компонентом персонажа
Компоненты рендеринга запрашивают в своем контейнере свойства с именами «positionx», «positiony» и «positionz» (если это 3D-игра), а затем запрашивают свойство «rendermodel». Исходя из этого, компоненты рендеринга отображают свойство, возвращаемое rendermodel в positionx, positiony и positionz. Свойства позиционирования изменяются компонентом движения, который сам запрашивает у контейнера свойство «скорость», которое, в свою очередь, настраивается компонентом символа на основе ввода с клавиатуры.
Если эти свойства не существуют, они создаются в момент их запроса и инициализируются действительным значением (например, 0).
На мой взгляд, компоненты никогда не должны запрашивать другие компоненты, так как они должны рассматриваться как максимально общие.