Pour lui, toutes les entités sont au même niveau d'une liste, il n'y a pas de listes spécifiques par composant.
A la place, sachant que les entités peuvent déclarer l'implémentation du composant d'affichage de cette façon :
(component renderable [func]
:fn func)
les entités à afficher sont sélectionnées comme-ci :
(renderer (all-e :renderable)) ;; get all entities that are renderable
cette liste sera envoyée à la fonction d'affichage générale :
;; define a function 'renderer' that takes all renderables
(defn renderer [renderables]
;; for each renderable entity
(doseq [e renderables]
;; get the entity's renderable component
(let [rend (as e :renderable)]
;; call the stored render function with the entity
((rend :fn) e))))
Même sans connaître ClosureScript, l'article un peu technique est intéressant à suivre.
# Component-Entity-System en ClosureScript
Posté par Joël Thieffry (site web personnel) . En réponse à la dépêche Je crée mon jeu vidéo E01 : les systèmes à entités. Évalué à 5.
Chris Granger, développeur de Light Table, a écrit un post-mortem sur un petit jeu qu'il a développé en ClosureScript. Il a utilisé l'approche Component-Entity-System, qui lui a permis de réduire son code à une grosse structure de données.
Pour lui, toutes les entités sont au même niveau d'une liste, il n'y a pas de listes spécifiques par composant.
A la place, sachant que les entités peuvent déclarer l'implémentation du composant d'affichage de cette façon :
les entités à afficher sont sélectionnées comme-ci :
cette liste sera envoyée à la fonction d'affichage générale :
Même sans connaître ClosureScript, l'article un peu technique est intéressant à suivre.