Я довольно долго возился с компонентными системами.Я много читал об этом и много тестировал, и я уже реализовал несколько разных подходов.
Также я знаю о многих недостатках, касающихся скорости и использования памяти.Со всеми моими пробежками, пытаясь решить эту проблему с разных точек зрения, я часто оказывался виновным в определенном шаблоне данных.
Идея проста: базовая структура дерева DOM-подобная используется для хранения всех данных одного объекта.Просто для примера я использую веб-сайт в качестве сущности - поэтому я придерживаюсь DOM.Он получил древовидную структуру данных, содержащую теги и те теги, которые содержат текст, числа и прочее.(Просто чтобы прояснить: я не говорю о разборе! Само дерево знает, какие данные оно хранит. Поэтому мне не нужно создавать данные из строки с некоторым отражением. Все есть как объекты или примитивы.)
Теперь у сущности есть не только DOM, но и список компонентов.Все, что вам нужно сделать, это перебирать компоненты и просто передавать их в структуру DOM.Компоненты теперь запрашивают интересующие их материалы. Каждый компонент может манипулировать данными, отправлять сообщения через дополнительную систему обмена сообщениями и так далее.Также при создании сущности компоненты могут внедрять любые данные, которые могут потребоваться в сущности.Например, для игры я могу представить себе сущность, имеющую инвентарь предметов.Таким образом, компонент инвентаря просто создает инвентарь при создании.Позже какой-то другой компонент может просматривать инвентарь и делать вещи.
Я знаю, что запросы - это узкое место.В конкретном случае я хочу использовать одну из моих попыток впервые сделать что-то реальное, это симуляция.Поэтому мне не нужно рендерить спрайты в реальном времени, и я могу использовать много ЦП и ОЗУ в течение более длительного времени.
Итак, вопрос в том, чего мне не хватает?Что за деньги с этим решением?За исключением скорости запросов.Мне кажется, что я думал об этом столько раз, что слишком сосредоточен на одном решении, пренебрегая всеми остальными с самого начала.
Заранее большое спасибо!