Los sistemas de eventos son increíbles, hacen un código domador extremadamente difícil de manejar y realmente permiten la creación dinámica de juegos a través de la comunicación fácil de objetos y el bucle del juego. Estoy teniendo dificultades con la eficiencia de mi implementación actual. Actualmente, mi ligera optimización de separar las listas de objetos en los eventos a los que responden ha hecho maravillas, pero debería haber más que pueda hacer.
Actualmente tengo dos métodos:
Más simple: todos los objetos se agregan a un vector cuando se envía un evento a todos los objetos se les envía el evento a través de su método handle_event ()
Más complejo: tengo un mapa con cadena como clave e int como valor. Cuando se agrega un tipo de evento, se agrega a este mapa, con el int simplemente incrementado (debe haber una mejor manera)
el vector de vectores de objetos y luego empuja hacia atrás un nuevo vector para manejar ese tipo de evento.
Cuando se llama a un evento, simplemente llama al int correspondiente en el mapa eventTypes al tipo dentro del vector de vectores de objetos y envía ese evento a cada objeto que maneja ese tipo de evento.
Este primer método es bastante lento (obviamente) para muchos objetos, pero bastante rápido para muy pocos objetos. Mientras que el segundo método es bastante rápido con objetos grandes que desean manejar diferentes tipos de eventos, pero más lento que el primer método por objeto con objetos que manejan el mismo tipo de evento.
¿Hay una manera más rápida (en cuanto al tiempo de ejecución)? ¿Hay una forma más rápida de buscar un int desde el tipo de cadena? (Inicialmente tenía una enumeración, pero no permitía tipos personalizados, que son necesarios debido al nivel de dinamismo deseado).