En 2D ou 3D, un système de composants d'entité (ECS) devrait au moins avoir accès au système GUI, s'il ne fait pas partie du même ECS.
Personnellement, je ne mélangerais pas les deux. La réutilisabilité du code pour une interface graphique ne se produit vraiment qu'au niveau supérieur. Répondre à la souris / au clavier, au rendu, etc. Les fonctions prises par les différents boutons ou les informations affichées par certaines listes ne sont pas suffisamment génériques pour être réutilisées.
Par exemple, j'imagine que les composants pour les entités GUI seraient quelque chose comme position
, render
et gui
. Où le composant GUI définirait le type d'action que l'entité GUI prend. Cependant, cette action va être assez unique et spécifique au contexte. Il en résulte que le système qui gère les composants de l'interface graphique est très grand et essentiellement conçu pour gérer chacune des fonctions de l'interface graphique (charger le jeu, enregistrer le jeu, trouver le serveur, etc.). Cela semble désordonné.
Je préfère faire un fichier de classe standard pour chaque "écran" de l'interface graphique. Avoir toutes les fonctionnalités de cet écran en un seul endroit (avec des références à une classe de fonctionnalités commune). C'est beaucoup plus propre et plus facile à gérer.
Cependant, comme je l'ai dit, l'ECS devrait avoir accès au système GUI. Il doit être en mesure de fournir des informations à l'interface graphique en fonction des entités de ses systèmes. Par exemple, survoler une unité alliée fera apparaître une fenêtre GUI avec toutes les informations sur cette unité. Lorsque survoler une unité ennemie ouvrirait une fenêtre GUI avec des informations limitées. Vous ne voulez probablement pas programmer l'interface graphique pour connaître la différence entre les deux, vous voulez demander à l'entité d'afficher ses informations.
Ainsi, les entités auront probablement une sorte de composant GUI, mais ce seront des entités "en jeu", pas des entités GUI. Ce composant utilisera le système GUI externe pour créer son interface GUI.