In 2D oder 3D sollte ein Entity Component System (ECS) mindestens Zugriff auf das GUI-System haben, wenn es nicht Teil desselben ECS ist.
Persönlich würde ich die beiden nicht mischen. Die Wiederverwendbarkeit von Code für eine GUI geschieht wirklich nur auf oberster Ebene. Antworten auf Maus / Tastatur, Rendern usw. Die Funktionen der verschiedenen Schaltflächen oder die Informationen, die in bestimmten Listen angezeigt werden, können nicht generisch genug gestaltet werden, um sie wiederzuverwenden.
Zum Beispiel würde ich mir vorstellen, dass die Komponenten für GUI-Entitäten so ähnlich position
sind wie render
undgui
. Wo die GUI-Komponente die Art der Aktion definieren würde, die die GUI-Entität ausführt. Diese Aktion wird jedoch ziemlich einzigartig und kontextspezifisch sein. Dies führt dazu, dass das System, das GUI-Komponenten verarbeitet, sehr groß ist und im Wesentlichen für die einzelnen GUI-Funktionen (Laden des Spiels, Speichern des Spiels, Suchen des Servers usw.) ausgelegt ist. Klingt unordentlich.
Ich würde es vorziehen, eine Standardklassendatei für jeden GUI "Bildschirm" zu erstellen. Haben Sie alle Funktionen für diesen Bildschirm an einem Ort (mit Verweisen auf eine gemeinsame Funktionsklasse). Es ist viel ordentlicher und einfacher zu handhaben.
Wie gesagt, das ECS sollte jedoch Zugriff auf das GUI-System haben. Es muss in der Lage sein, Informationen basierend auf Entitäten in seinen Systemen an die GUI zu liefern. Wenn Sie zum Beispiel über eine verbündete Einheit fahren, wird ein GUI-Fenster mit allen Informationen zu dieser Einheit geöffnet. Wenn Sie über einer feindlichen Einheit schweben, wird ein GUI-Fenster mit begrenzten Informationen geöffnet. Sie möchten die GUI wahrscheinlich nicht so programmieren, dass sie den Unterschied zwischen beiden erkennt. Sie möchten die Entität auffordern, ihre Informationen anzuzeigen.
Entitäten werden also wahrscheinlich immer noch eine Art GUI-Komponente haben, aber sie werden Entitäten "im Spiel" sein, keine GUI-Entitäten. Diese Komponente verwendet das externe GUI-System, um ihre GUI-Schnittstelle zu erstellen.