W 2D lub 3D system komponentu bytu (ECS) powinien mieć przynajmniej dostęp do systemu GUI, jeśli nie jest częścią tego samego ECS.
Osobiście nie mieszałbym tych dwóch. Ponowne użycie kodu dla GUI dzieje się naprawdę tylko na najwyższym poziomie. Odpowiadanie na mysz / klawiaturę, renderowanie i tak dalej. Funkcje, które pełnią różne przyciski lub informacje wyświetlane na niektórych listach, nie są tak naprawdę dość ogólne, aby można było z nich korzystać ponownie.
Wyobrażam sobie na przykład, że komponenty jednostek GUI byłyby podobne position
, render
i gui
. Tam, gdzie komponent GUI określa rodzaj działania, które podejmuje jednostka GUI. Ta akcja będzie jednak wyjątkowa i specyficzna dla kontekstu. Powoduje to, że system, który obsługuje komponenty GUI, jest bardzo duży i zasadniczo zaprojektowany do obsługi każdej z funkcji GUI (załaduj grę, zapisz grę, znajdź serwer itp.). Brzmi bałagan.
Wolałbym zrobić standardowy plik klasy dla każdego „ekranu” GUI. Posiadaj wszystkie funkcje dla tego ekranu w jednym miejscu (z odniesieniami do wspólnej klasy funkcjonalności). Jest o wiele ładniejszy i łatwiejszy w zarządzaniu.
Jednak, jak powiedziałem, ECS powinien mieć dostęp do systemu GUI. Musi być w stanie dostarczyć informacje do GUI na podstawie podmiotów w swoich systemach. Na przykład najechanie kursorem na jednostkę sojuszniczą spowoduje wyświetlenie okna GUI ze wszystkimi informacjami o tej jednostce. Gdy najechanie myszką na jedność wroga wyskoczy okno GUI z ograniczoną ilością informacji. Prawdopodobnie nie chcesz zaprogramować GUI, aby rozpoznać różnicę między nimi, chcesz poprosić jednostkę o wyświetlenie jej informacji.
Tak więc jednostki nadal będą prawdopodobnie miały jakiś komponent GUI, ale będą to jednostki „w grze”, a nie jednostki GUI. Ten komponent użyje zewnętrznego systemu GUI do utworzenia interfejsu GUI.