En 2D o 3D, un sistema de componentes de entidad (ECS) debe tener al menos acceso al sistema GUI, si no es parte del mismo ECS.
Personalmente, no mezclaría los dos. La reutilización del código para una GUI solo ocurre realmente en el nivel superior. Respondiendo al mouse / teclado, renderizado, etc. Las funciones que toman los diferentes botones, o la información que muestran ciertas listas no es realmente algo que pueda ser lo suficientemente genérico como para reutilizar.
Por ejemplo, me imagino que los componentes para entidades GUI serían algo así como position
, render
y gui
. Donde el componente GUI definiría el tipo de acción que toma la entidad GUI. Sin embargo, esa acción será bastante única y específica del contexto. Esto da como resultado que el sistema que maneja los componentes de la GUI es muy grande y está esencialmente diseñado para manejar cada una de las funciones de la GUI (cargar juego, guardar juego, buscar servidor, etc.). Suena desordenado
Prefiero hacer un archivo de clase estándar para cada "pantalla" GUI. Tenga toda la funcionalidad para esa pantalla en un solo lugar (con referencias a una clase de funcionalidad común). Es mucho más ordenado y más fácil de administrar.
Sin embargo, como dije, el ECS debería tener acceso al sistema GUI. Necesita poder suministrar información a la GUI basada en entidades en sus sistemas. Por ejemplo, al pasar el mouse sobre una unidad aliada, aparecerá una ventana GUI con toda la información sobre esa unidad. Cuando se cierne sobre una unidad enemiga, aparecerá una ventana GUI con información limitada. Es probable que no desee programar la GUI para conocer la diferencia entre los dos, desea solicitar a la entidad que muestre su información.
Por lo tanto, es probable que las entidades tengan algún tipo de componente GUI, pero serán entidades "en el juego", no entidades GUI. Este componente utilizará el sistema GUI externo para crear su interfaz GUI.