C++ Tag Dispatching: técnica para mejorar tu código en un motor de videojuegos
Channel: Profesor Retroman
Date: 2022-07-14

Curso: https://bit.ly/CPPGameDev-2021-Curso
==== Sesión 5.4 - 14/dic/2021 ====
Volvemos al desarrollo de nuestro GameEngine en C++. Revisamos el estado de nuestro muy básico motor de entidades y vemos cómo podemos extenderlo para poder tener distintos tipos de componentes. Nos preguntamos cómo sabremos qué componentes tendrá cada entidad y vemos cómo hacerlo usando identificadores y máscaras. Estos identificadores y máscaras tienen que ser distintos para cada tipo de componente. Eso nos lleva al Tag Dispatching: un mecanismo para poder pasar un "tipo" a una función y obtener información relativa a ese tipo. En realidad, se pasa un objeto del tipo que queremos pero no es utilizado: el compilador puede ver esto y obviar la creación del objeto, produciendo la llamada en función del tipo.

Después vemos cómo podemos usar constexpr para garantizar que todo esto se calcula en tiempo de compilación. Gracias a eso, no sólo ahorramos tiempo, también podemos utilizar estructuras como std::tuple. Vemos cómo utilizar una tupla y cómo aprovecharnos para obtener los vectores por tipo usando std::get. También explicamos las diferencias entre std::tuple, std::vector y std::array. Finalmente resolvemos dudas sobre el tag dispatching y la implementación del motor de componentes.

==== Contenidos ====
00:00 Estructura base de juego y motor de entidades
01:55 Cómo saber qué componentes tiene una entidad
07:53 Usar el tipo más pequeño necesario
10:03 Qué es Tag Dispatching y para qué se usa
16:42 constexpr: IDs y máscaras en tiempo de compilación
17:34 std::tuple para vectores de componentes
20:15 Obtener componetes por tipo con std::get
22:10 Diferencias entre tuple, array y vector
25:15 Dudas sobre Tag Dispathing y motor de componentes

#GameDev #programming #CPP #coding 
====================
Clase de Videojuegos 1 2021/22
Grado en Ingeniería Multimedia
Universidad de Alicante