¿Cómo codificar UI / HUD en Entity System?

18

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?

Sylpheed
fuente

Respuestas:

17

Tal vez estás pensando demasiado en los sistemas de entidades. Las entidades están destinadas a abarcar objetos en el juego, como personajes, enemigos, guiones, balas, disparadores, etc.

Tal vez si separa su interfaz de usuario, será mucho mejor y más fácil. No tiene que hacer TODO dentro del alcance de las entidades.

Gustavo Maciel
fuente
Esto también es lo que dice Adam Martin en una de sus publicaciones o comentarios en t-machine. El ES es una solución para un problema específico. Puede y debe usarse junto con soluciones más "tradicionales" para otros aspectos del juego (motor).
user8363
Gracias. No estoy seguro de qué debería estar en ES. Entonces, ¿cómo codifica una IU efectiva? Creo que MVC no es suficiente porque tengo problemas con la jerarquía.
Sylpheed
Veo que acepta usar una arquitectura diferente para la interfaz de usuario. Entonces, ¿cuál es el problema con MVC?
Narek
@Armen MVC no tiene problemas, pero lo tiene dentro del alcance de las entidades. Es solo que sus beneficios no superarán sus desventajas. No es necesario ser astronauta de arquitectura
Gustavo Maciel
3

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.

MichaelHouse
fuente
1

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.

serpiente5
fuente