Os sistemas de eventos são incríveis, tornam o código extremamente difícil de manejar e realmente permitem a criação dinâmica de jogos através da fácil comunicação de objetos e do loop do jogo. Estou tendo dificuldades com a eficiência da minha implementação atual. Atualmente, minha pequena otimização de separar as listas de objetos nos eventos aos quais eles respondem fez maravilhas, mas deve haver mais que eu possa fazer.
Atualmente, tenho dois métodos:
Mais simples: todos os objetos são adicionados a um vetor quando um evento é enviado, todos os objetos são enviados ao evento por meio do método handle_event ()
Mais complexo: eu tenho um mapa com string como chave e int como valor. Quando um tipo de evento é adicionado, ele é adicionado a este mapa, com o int simplesmente sendo incrementado (deve haver uma maneira melhor)
do vetor de vetores de objetos e, em seguida, empurra um novo vetor para lidar com esse tipo de evento.
Quando um evento é chamado, ele simplesmente chama o int correspondente no mapa eventTypes para o tipo dentro do vetor de vetores de objetos e envia esse evento para cada objeto que manipula esse tipo de evento.
Esse primeiro método é bastante lento (obviamente) para muitos objetos, mas bastante rápido para muito poucos objetos. Enquanto o segundo método é bastante rápido com objetos grandes que gostariam de lidar com diferentes tipos de eventos, mas mais lento que o primeiro método por objeto com objetos manipulando o mesmo tipo de evento.
Existe uma maneira mais rápida (em termos de tempo de execução)? Existe uma maneira mais rápida de procurar um int do tipo string? (Inicialmente eu tinha um enum, mas não permitia tipos personalizados, necessários por causa do nível de dinamismo desejado).