on ne sait pas très bien où récupérer les entrées, et comment les dispatcher vers la bonne entité
Il faut séparer les deux avec un pattern command: le joueur n'appuie pas sur des touches pour se déplacer, il donne des ordres de déplacement à une entité de la simulation.
Par contre je déconseille vivement, sauf pour des jeux très simples, de permettre à une entité de gérer elle même quoique ce soit (et donc le "dispatch vers"), SURTOUT pas la mise à jour d'autres entités: imagine deux tanks qui se tirent dessus dans un RTS. C'est au moteur du jeu d'appliquer les règles de dommages dans le bon ordre, car si tu mets le code aux niveaux des tanks, tu vas te retrouver avec une entité morte qui continue à tirer :-)
Autre exemple, l'affichage. Au début, c'est simple, tu as un système Render qui affiche toutes les entités qui doivent être affichées. Sauf que pour certains trucs, c'est un peu plus complexe
Il te faut un scenegraph: tes entités auront des composants faisant référence à des noeuds du scenegraph.
Un système de gestion d'événements est indispensable mais son interaction avec le système à entités n'est jamais explicité et c'est un grand oubli.
Il suffit de plugger n'importe quel système d'évènements avec un composant Publisher et un composant Subscriber.
Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board
[^] # Re: Systèmes-Entités-Composants
Posté par devnewton 🍺 (site web personnel) . En réponse à la dépêche Je crée mon jeu vidéo E15 : J'arrête.... Évalué à 5.
Il faut séparer les deux avec un pattern command: le joueur n'appuie pas sur des touches pour se déplacer, il donne des ordres de déplacement à une entité de la simulation.
Par contre je déconseille vivement, sauf pour des jeux très simples, de permettre à une entité de gérer elle même quoique ce soit (et donc le "dispatch vers"), SURTOUT pas la mise à jour d'autres entités: imagine deux tanks qui se tirent dessus dans un RTS. C'est au moteur du jeu d'appliquer les règles de dommages dans le bon ordre, car si tu mets le code aux niveaux des tanks, tu vas te retrouver avec une entité morte qui continue à tirer :-)
Il te faut un scenegraph: tes entités auront des composants faisant référence à des noeuds du scenegraph.
Il suffit de plugger n'importe quel système d'évènements avec un composant Publisher et un composant Subscriber.
Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board