В 2D или 3D компонентная система объектов (ECS) должна, по крайней мере, иметь доступ к системе GUI, если она не является частью той же ECS.
Лично я бы не совмещал их. Повторное использование кода для графического интерфейса действительно происходит только на верхнем уровне. Реагирование на мышь / клавиатуру, рендеринг и так далее. Функции, выполняемые различными кнопками, или информация, отображаемая в определенных списках, на самом деле не могут быть достаточно общими для повторного использования.
Например, я бы предположил, что компоненты для объектов GUI будут что-то вроде position
, render
и gui
. Где компонент GUI будет определять тип действия, которое предпринимает объект GUI. Тем не менее, это действие будет довольно уникальным и специфичным для контекста. Это приводит к тому, что система, которая обрабатывает компоненты графического интерфейса, является очень большой и по существу предназначена для обработки каждой из функций графического интерфейса пользователя (загрузка игры, сохранение игры, поиск сервера и т. Д.). Звучит грязно.
Я бы предпочел сделать стандартный файл класса для каждого «экрана» графического интерфейса. Соберите всю функциональность этого экрана в одном месте (со ссылками на общий класс функциональности). Это намного аккуратнее и проще в управлении.
Однако, как я уже сказал, ECS должен иметь доступ к системе GUI. Он должен иметь возможность предоставлять информацию в графический интерфейс на основе сущностей в своих системах. Например, при наведении курсора на союзное подразделение выскочит окно GUI со всей информацией об этом подразделении. Где зависание над вражеским единством выскочит окно GUI с ограниченной информацией. Скорее всего, вы не хотите программировать GUI, чтобы узнать разницу между ними, вы хотите попросить объект отобразить его информацию.
Таким образом, сущности, вероятно, все еще будут иметь некоторый компонент GUI, но они будут объектами «в игре», а не сущностями GUI. Этот компонент будет использовать внешнюю систему GUI для создания своего интерфейса GUI.