У 2D або 3D система компонентів сутності (ECS) повинна мати принаймні доступ до системи GUI, якщо вона не є частиною того ж ECS.
Особисто я б їх не змішував. Повторне використання коду для GUI дійсно відбувається лише на найвищому рівні. Відповідь на мишу / клавіатуру, візуалізацію тощо. Функції, які беруть різні кнопки, або інформація, яка відображається в певних списках, насправді не є достатньо загальною для повторного використання.
Наприклад, я думаю, що компоненти для GUI-об'єктів будуть чимось на зразок position
, render
і gui
. Там, де компонент GUI визначав би тип дії, який здійснює сутність GUI. Однак ця дія буде досить унікальною і конкретна. Це призводить до того, що система, яка обробляє компоненти GUI, дуже велика і по суті призначена для обробки кожної з функцій GUI (завантаження гри, збереження гри, пошук сервера тощо). Звучить безладно.
Я вважаю за краще зробити стандартний файл класу для кожного "екрана" графічного інтерфейсу. Майте всю функціональність цього екрана в одному місці (із посиланнями на загальний клас функціональності). Це набагато акуратніше і простіше в управлінні.
Однак, як я вже сказав, ECS повинен мати доступ до системи GUI. Потрібно мати можливість подавати інформацію до графічного інтерфейсу на основі сутностей у його системах. Наприклад, наведення курсора на суміжну одиницю відобразить вікно графічного інтерфейсу з усією інформацією про цей блок. Якщо наведення курсору над ворожою єдністю з’явиться вікно GUI з обмеженою інформацією. Ви, ймовірно, не хочете запрограмувати графічний інтерфейс, щоб знати різницю між ними, ви хочете попросити організацію відобразити її інформацію.
Таким чином, суб'єкти все ще матимуть якийсь компонент GUI, але вони будуть "в грі", а не GUI. Цей компонент буде використовувати зовнішню систему GUI для створення їх інтерфейсу GUI.