Je sais que cette question a été posée plusieurs fois, mais je ne sais toujours pas comment implémenter la gestion des entrées dans un moteur basé sur des composants.
La conception basée sur les composants que j'ai utilisée était basée sur la série de blogs de T = Machine et sur Artemis dans lequel les entités ne sont que des identifiants.
Il y a trois idées principales que j'ai dans la mise en œuvre de la gestion des entrées:
- Le composant d'entrée contiendra les événements qui l'intéressent. Le système d'entrée traduira les événements de touches et de souris en événements de jeu et parcourra les entités avec le composant d'entrée et s'ils sont intéressés par l'événement, une action appropriée sera prise par le système d'entrée. Cette action serait codée en dur dans le système d'entrée.
- Aucun composant d'entrée. Vous devez enregistrer des entités avec des événements spécifiques dans le système d'entrée. Le système d'entrée enverrait alors des messages (avec l'ID d'entité et le type d'événement) à d'autres systèmes afin que ceux-ci puissent prendre les mesures appropriées. Ou comme dans le premier cas, les actions seraient codées en dur dans le système d'entrée.
- Semblable à la première méthode, mais au lieu de coder en dur l'action sur le système d'entrée, le composant contiendrait une carte des événements aux fonctions (c'est-à-dire
std::map<std::function>
) qui serait appelée par le système d'entrée. Cela a pour effet supplémentaire de pouvoir coupler le même événement à différentes actions.
Recommanderiez-vous l'une des méthodes ci-dessus ou avez-vous des suggestions qui pourraient m'aider à mettre en œuvre un système de gestion des entrées flexible? De plus, je ne suis pas encore familier avec le multi-threading mais toutes les suggestions qui rendraient l'implémentation compatible avec les threads sont également les bienvenues.
Remarque: Une exigence supplémentaire que j'aimerais que l'implémentation remplisse est que je puisse transmettre la même entrée à de nombreuses entités, comme par exemple déplacer une entité caméra et le lecteur en même temps.