filmov
tv
C++ Lambdas y callbacks variádicos: sistemas flexibles en GameEngine ECS
Показать описание
==== Sesión 11 - 23/feb/2022 ====
Revisamos nuestro GameEngine Entity-Component-System (ECS) básico y diseñamos mejoras para manejar sistemas. Nos preguntamos sobre qué son los Lambdas, cómo funcionan y qué relación tienen con los punteros a función. Aprovechamos para diferenciar entre tipo/clase y objeto y vemos lo importante que son estos conceptos. Mejoramos nuestro bucle forall para que pueda aceptar lambdas genéricos. Aprendemos las diferencias entre pasar por valor, referencia constante y forwarding reference, en el caso de Lambdas genéricos.
Después implementamos el getComponent en nuestro Entity Manager, y vemos cómo reutilizar código para mejorar legibilidad y mantenibilidad. Analizamos lo importante de esta práctica y cómo hacerla con frecuencia.
Probamos el motor y nos encontramos con un segmentation fault por desreferenciar un null pointer. Vemos lo importante que es tener habilitado el address sanitizer y cómo localizar y corregir estos fallos rápidamente.
Nos planteamos como mejorar nuestro bucle de recorrido de todas las entidades, para que cada sistema sólo procese las entidades que le harán falta y no todas. Implementamos un método for each que recibe los componentes que maneja nuestro sistema para recorrer sólo las entidades que los tienen. Vemos cómo implementarlo con fold expressions.
Mejoramos nuestro for each utilizando listas de tipos (typelists) en lugar de tipos sueltos. Con eso podemos diseñar nuestros sistemas para que tengan una firma, hacerlos más legibles y manejables. Aprendemos también como extraer los template parameter packs a partir de los typelists que los contienen, de una forma fácil y rápida.
Finalmente, implementamos un callback variádico para recibir los componentes como parámetros, evitando llamadas individuales para extraerlos.
==== Contenidos ====
0:00:00 GameEngine ECS básico: Diagrama de de la implementación
0:01:50 ¿Cómo está implementado el GameEngine ECS? Revisión de código
0:05:30 Funciones Lambda en C++ ¿Qué son?
0:08:00 Diferencia entre Tipo/Clase y Objeto en C++
0:11:29 Punteros a función en C++: ¿Por qué son así?
0:14:35 ¿Qué son las capturas de un Lambda?
0:18:05 ¿Para qué necesito capturas en un Lambda?
0:21:05 Recibir objetos Lambda genéricos como parámetro
0:24:00 No podemos saber el tipo de un Lambda (auto)
0:25:25 Lambdas y paso por copia, referencia, const y forwarding references
0:33:18 Obtener Componentes en GameEngine ECS
0:39:23 Cómo reutilizar código y hacerlo más legible (mantenibilidad)
0:44:33 Métodos get const correct
0:48:46 Probando el GameEngine y el Sistema de Física
0:51:30 Detectando y corrigiendo un segmentation fault (null pointer)
0:57:19 Diseñar mejoras en GameEngine ECS: for each y componentes
1:01:40 fold expressions en C++: condicionales con tipos variádicos
1:15:40 Listas de tipos (typelists) para mejorar el GameEngine ECS
1:18:10 Cómo obtener parameter packs de typelists (listas de tipos)
1:28:10 Variadic Callbacks: cómo implementarlos
#GameDev #programming #Coding #CPP
====================
Clase de Videojuegos 1 2021/22
Grado en Ingeniería Multimedia
Universidad de Alicante
Revisamos nuestro GameEngine Entity-Component-System (ECS) básico y diseñamos mejoras para manejar sistemas. Nos preguntamos sobre qué son los Lambdas, cómo funcionan y qué relación tienen con los punteros a función. Aprovechamos para diferenciar entre tipo/clase y objeto y vemos lo importante que son estos conceptos. Mejoramos nuestro bucle forall para que pueda aceptar lambdas genéricos. Aprendemos las diferencias entre pasar por valor, referencia constante y forwarding reference, en el caso de Lambdas genéricos.
Después implementamos el getComponent en nuestro Entity Manager, y vemos cómo reutilizar código para mejorar legibilidad y mantenibilidad. Analizamos lo importante de esta práctica y cómo hacerla con frecuencia.
Probamos el motor y nos encontramos con un segmentation fault por desreferenciar un null pointer. Vemos lo importante que es tener habilitado el address sanitizer y cómo localizar y corregir estos fallos rápidamente.
Nos planteamos como mejorar nuestro bucle de recorrido de todas las entidades, para que cada sistema sólo procese las entidades que le harán falta y no todas. Implementamos un método for each que recibe los componentes que maneja nuestro sistema para recorrer sólo las entidades que los tienen. Vemos cómo implementarlo con fold expressions.
Mejoramos nuestro for each utilizando listas de tipos (typelists) en lugar de tipos sueltos. Con eso podemos diseñar nuestros sistemas para que tengan una firma, hacerlos más legibles y manejables. Aprendemos también como extraer los template parameter packs a partir de los typelists que los contienen, de una forma fácil y rápida.
Finalmente, implementamos un callback variádico para recibir los componentes como parámetros, evitando llamadas individuales para extraerlos.
==== Contenidos ====
0:00:00 GameEngine ECS básico: Diagrama de de la implementación
0:01:50 ¿Cómo está implementado el GameEngine ECS? Revisión de código
0:05:30 Funciones Lambda en C++ ¿Qué son?
0:08:00 Diferencia entre Tipo/Clase y Objeto en C++
0:11:29 Punteros a función en C++: ¿Por qué son así?
0:14:35 ¿Qué son las capturas de un Lambda?
0:18:05 ¿Para qué necesito capturas en un Lambda?
0:21:05 Recibir objetos Lambda genéricos como parámetro
0:24:00 No podemos saber el tipo de un Lambda (auto)
0:25:25 Lambdas y paso por copia, referencia, const y forwarding references
0:33:18 Obtener Componentes en GameEngine ECS
0:39:23 Cómo reutilizar código y hacerlo más legible (mantenibilidad)
0:44:33 Métodos get const correct
0:48:46 Probando el GameEngine y el Sistema de Física
0:51:30 Detectando y corrigiendo un segmentation fault (null pointer)
0:57:19 Diseñar mejoras en GameEngine ECS: for each y componentes
1:01:40 fold expressions en C++: condicionales con tipos variádicos
1:15:40 Listas de tipos (typelists) para mejorar el GameEngine ECS
1:18:10 Cómo obtener parameter packs de typelists (listas de tipos)
1:28:10 Variadic Callbacks: cómo implementarlos
#GameDev #programming #Coding #CPP
====================
Clase de Videojuegos 1 2021/22
Grado en Ingeniería Multimedia
Universidad de Alicante
Комментарии