Я пытаюсь разобраться с компонентным дизайном сущностей.
Моим первым шагом было создание различных компонентов, которые можно было бы добавить к объекту. Для каждого типа компонента у меня был менеджер, который вызывал бы функцию обновления каждого компонента, передавая такие вещи, как состояние клавиатуры и т. Д. По мере необходимости.
Следующее, что я сделал, это удалил объект, и у каждого компонента был свой идентификатор. Таким образом, объект определяется компонентами, имеющими одинаковые идентификаторы.
Теперь я думаю, что мне не нужен менеджер для всех моих компонентов, например, у меня есть SizeComponent, который просто имеет Sizeсвойство). В результате SizeComponentметод обновления не имеет, а метод обновления менеджера ничего не делает.
Моей первой мыслью было создать ObjectPropertyкласс, к которому компоненты могут обращаться, вместо того, чтобы иметь их как свойства компонентов. Таким образом, объект будет иметь число ObjectPropertyи ObjectComponent. Компоненты будут иметь логику обновления, которая запрашивает у объекта свойства. Менеджер будет управлять вызовом метода обновления компонента.
Мне это кажется чрезмерной разработкой, но я не думаю, что смогу избавиться от компонентов, потому что мне нужен способ, чтобы менеджеры знали, для каких объектов нужна какая логика компонента (иначе я бы просто удалил компонент полностью и запихни свою логику обновления в менеджер).
- Это (имея
ObjectProperty,ObjectComponentиComponentManagerклассы) сверхинжиниринг? - Что было бы хорошей альтернативой?
RenderingComponentи a PhysicsComponent. Я слишком обдумываю решение о том, где разместить недвижимость? Должен ли я просто вставить его в один, а затем запросить другой объект для компонента, который имеет необходимое свойство?
PhysicalStateInstance(по одному на объект) вместе с GravityPhysicsShared(по одному на игру); однако я испытываю желание сказать, что это входит в сферу эйфории архитекторов, не создавайте себе дыру (именно то, что я сделал с моей первой компонентной системой). ПОЦЕЛУЙ.

SizeComponentизлишне - вы можете предположить, что большинство объектов имеют размер - это такие вещи, как рендеринг, ИИ и физика, где используется компонентная модель; Размер всегда будет вести себя одинаково - так что вы можете поделиться этим кодом.