Ma question est:
Comment puis-je gérer les états de jeu dans mon système d'entités, sans recourir à la conservation d'une pile d'objets d'état de jeu?
Ainsi, la conception de mon système d'entités signifie que lorsqu'une entité doit s'enregistrer pour des événements d'entrée par exemple, le composant d'entrée appelle le système d'entrée et dit "enregistrer cette entité pour cette entrée". C'est très bien, mais si vous ajoutez à cela le concept d'états de jeu (par exemple un écran de pause), il devient difficile de déterminer si une entité est dans l'état actuel et doit recevoir l'entrée.
Je pourrais augmenter le composant / système d'entrée pour qu'il dise, "enregistrer cette entité pour cette entrée dans ces états de jeu", mais cela nécessite que chaque entité sache dans quels états elle va être utilisée, et cela peut ne pas être évident. De plus, conserver une liste des états du jeu par entrée enregistrée (et d'autres systèmes qui utilisent des rappels) ne semble pas trop efficace.
Une autre idée que j'ai eue est qu'il y aura une entité qui représente l'état du jeu, marquez-la comme étant désactivée, puis lors de la génération de l'événement d'entrée, vérifiez que l'entité n'est pas un descendant d'une entité d'état de jeu désactivée. Semble coûteux de déterminer le parent pour chaque rappel.
Une autre idée est que tous les systèmes stockent leurs données par rapport à l'état actuel, de cette façon lors de la génération de l'entrée, l'entité cible ne sera même pas candidate. Cependant, cela nuit vraiment à la possibilité d'autoriser la communication entre des entités dans des états différents (pas vraiment un problème pour les écrans de pause, mais pensez à la sélection des verrous dans Oblivion / Skyrim).
La seule autre idée que j'ai eue est que tous les composants gèrent les événements de changement d'état et communiquent avec leur système pertinent pour désactiver tout ce qu'ils ont enregistré et le réactiver lors du retour à cet état.
Les deuxièmes (marquer un objet comme désactivé) et les autres (demander à chaque composant de gérer les changements d'état) semblent être les meilleures de mes idées, mais aucune d'entre elles ne me semble particulièrement intéressante.
Quelqu'un d'autre a-t-il d'autres idées sur la façon de procéder?
modifier Bien que je parle d'entrée spécifiquement dans cette question, cela peut signifier tout système capable d'envoyer des messages / événements à des entités, comme des collisions, des événements de minuterie, etc.