Creo que ya tengo la idea del Sistema de Entidades inspirado en Adam Martin (t-machine). Quiero comenzar a usar esto para mi próximo proyecto.
Ya sé lo básico de Entidad, Componentes y Sistemas. Mi problema es cómo manejar UI / HUD. Por ejemplo, una ventana de búsqueda, una ventana de habilidades, una ventana de información del personaje, etc. ¿Cómo maneja los eventos de la IU (por ejemplo, presionar un botón)? Estas son cosas que no necesitan ser procesadas en cada cuadro. Actualmente, estoy usando MVC para codificar la interfaz de usuario, pero no creo que sea compatible con Entity System.
He leído que Entity System está incrustado en una OOP más grande. No sé si la IU está fuera de ES o no. ¿Cómo me acerco a este?
fuente
Si bien creo que una IU de entidad / componente podría funcionar, sería difícil hacerlo. Además, está lo suficientemente alejado de los componentes y sistemas que tendrías para procesar tus entidades de juego, esencialmente sería solo otro sistema de entidad / componente dentro de tu juego. No puedo imaginar que haya mucha superposición entre los dos.
Los sistemas de entidades son increíbles y puede ser tentador usarlos en todas partes. Después de todo, cuando obtienes un martillo realmente dulce, estás tentado a tratar todos tus problemas como si fueran uñas. Sin embargo, el sistema EC es solo otra herramienta en su bolsa de programación. Para los problemas que se utilizan para resolver, funciona realmente bien, pero tiene mejores herramientas para problemas como la interfaz de usuario.
La estructura de herencia funciona muy bien para las GUI. No solo para crear los componentes de la interfaz de usuario, sino también para diseñarlos. Es realmente agradable poder hacer que los componentes de la interfaz de usuario sean hijos de otros componentes para que puedan heredar propiedades como la posición, la escala y la opacidad. Si intentara configurar eso con un sistema EC, tendría que romper algunas reglas del sistema EC.
fuente
Puede crear una nueva función de interfaz que se llama cada vez que se dibuja UI / HUD y permitir que los componentes personalizados / con secuencias de comandos implementen esa función. Esto requiere un sistema IMGUI (hay muchos tutoriales en Google, esta es solo la presentación original) para ser utilizado. Con eso, puede hacer ventanas como entidades dentro de las cuales tendrá su propio componente de construcción de interfaz de usuario y un componente de renderizador de marco de ventana.
En cuanto a no procesar todo esto en cada cuadro, puede representar toda la interfaz de usuario en un búfer diferente que actualizará solo en todo tipo de eventos de entrada / datos. Es decir, cada vez que se recibe un evento, cambia alguna variable para indicar que la ventana necesita ser repintada en el siguiente cuadro. Si esa variable es verdadera, se establece en falso y se llaman a las interfaces de UI después de eso. Si desea animaciones, es importante que use este orden exacto de operaciones para que la propia interfaz de usuario pueda desencadenar una nueva pintura para el siguiente fotograma.
fuente