Acho que decidi que realmente gosto de manipuladores de eventos. Talvez eu esteja sofrendo um pouco de paralisia da análise, mas estou preocupado em tornar meu projeto pesado ou encontrar outras consequências imprevistas para minhas decisões de projeto.
Atualmente, meu mecanismo de jogo faz renderização básica baseada em sprite com uma câmera panorâmica. Meu design se parece um pouco com isso:
SceneHandler
Contém uma lista de classes que implementam a interface SceneListener (atualmente apenas Sprites). Chamadas render () uma vez por tick e envia onCameraUpdate (); mensagens para SceneListeners.
InputHandler
Pesquisa a entrada uma vez por tick e envia uma mensagem "onKeyPressed" simples para InputListeners. Eu tenho um Camera InputListener que contém uma instância de SceneHandler e aciona updateCamera (); eventos com base no que é a entrada.
AgentHandler
Chama ações padrão em qualquer agente (AI) uma vez por tick e verifica a pilha quanto a novos eventos registrados, enviando-os para agentes específicos, conforme necessário.
Portanto, tenho objetos de sprite básicos que podem se mover em torno de uma cena e usar comportamentos rudimentares de direção para viajar. Eu entrei na detecção de colisão e é aqui que não tenho certeza de que a direção que meu projeto está indo é boa. É uma boa prática ter muitos manipuladores de eventos pequenos? Eu imagino indo do jeito que sou que eu teria que implementar algum tipo de CollisionHandler.
Eu estaria melhor com um EntityHandler mais consolidado que lida com IA, atualizações de colisão e outras interações de entidade em uma classe? Ou ficarei bem em implementar muitos subsistemas de manipulação de eventos diferentes que transmitem mensagens entre si com base no tipo de evento que é? Devo escrever um EntityHandler que é simplesmente responsável por coordenar todos esses manipuladores de sub eventos?
Percebo que em alguns casos, como meu InputHandler e SceneHandler, esses são tipos muito específicos de eventos. Uma grande parte do código do meu jogo não se preocupa com a entrada, e uma grande parte não se importa com as atualizações que ocorrem puramente na renderização da cena. Assim, sinto que meu isolamento desses sistemas é justificado. No entanto, estou fazendo esta pergunta abordando especificamente eventos do tipo lógica de jogo.