La mia domanda è:
Come posso gestire gli stati di gioco nel mio sistema di entità, senza ricorrere a mantenere una pila di oggetti di stato di gioco in giro?
Quindi la progettazione del mio sistema di entità significa che quando un'entità deve registrarsi per eventi di input, ad esempio, il componente di input chiama il sistema di input e dice "registra questa entità per questo input". Questo va bene e va bene, tuttavia se si aggiunge a questo il concetto di stati del gioco (diciamo una schermata di pausa), diventa un problema capire se un'entità è nello stato corrente e dovrebbe ricevere l'input.
Potrei aumentare il componente / sistema di input in modo che dica "registra questa entità per questo input mentre si trova in questi stati di gioco", ma ciò richiede che ogni entità sappia in quali stati verrà utilizzata e che potrebbe non essere ovvio. Inoltre, mantenere un elenco di stati di gioco in giro per input registrato (e altri sistemi che utilizzano callback) non sembra troppo efficiente.
Un'altra idea che ho avuto è che ci sarà un'entità che rappresenta lo stato del gioco, contrassegnarlo come disabilitato, quindi quando si genera l'evento di input verificare che l'entità non discenda da un'entità di stato del gioco disabilitata. Sembra costoso elaborare il genitore per ogni richiamata.
Un'altra idea è che tutti i sistemi memorizzino i loro dati in chiave sullo stato corrente, in questo modo quando si genera l'input, l'entità target non sarà nemmeno un candidato. Tuttavia, ciò danneggia davvero la capacità di consentire la comunicazione tra entità in diversi stati (non è un problema per le schermate di pausa, ma pensa alla selezione dei blocchi in Oblivion / Skyrim).
L'unica altra idea che ho avuto è quella di avere tutti i componenti in grado di gestire eventi di cambiamento di stato e comunicare con il loro sistema pertinente per disabilitare tutto ciò che hanno registrato e riattivarlo quando si torna a questo stato.
Il secondo (contrassegnare un oggetto come disabilitato) e avanti (ogni componente ha a che fare con i cambiamenti di stato) sembra la migliore delle mie idee, ma nessuna di esse mi salta fuori come particolarmente grande.
Qualcun altro ha altre idee su come farlo?
modifica Mentre parlo di input specificamente in questa domanda, può significare qualsiasi sistema in grado di inviare messaggi / eventi a entità, come collisioni, eventi timer, ecc ...