Construction de l’Entity Component System

Actuellement on est devant plusieurs problématiques, comment construire des entités configurables à souhait ? Comment intégrer des fonctionnalités aussi simplement qu’en ajoutant une configuration ? D’ailleurs comment ajouter ou retirer une fonctionnalité d’une entité en jeu ? Comment rendre une entité polymorphe ?

Les Component ou Composants sont la réponse et en fait tout le pattern Entity Component System est la réponse.
Le fonctionnement est simple, une Entity au départ doit être un objet vide auquel on va lui coller des Components pour lui donner des fonctionnalités via les Systems
Par exemple on voudrait dessiner un Rectangle Rouge, de grandeur 50×50, à une position x -> 5 et y -> 5 et on voudrait qu’il bouge dans une certaine direction. Tout ça est composable avec :

  • Composant Size : qui donne une hauteur et une largeur
  • Composant Position : qui donne deux points x et y pour une position sur le plan 2D, on pourrait rajouter un point Z pour rendre la position 3D
  • Composant RenderRectangle : qui comprend une configuration concernant sa couleur et pourquoi pas une donnée sur une éventuelle bordure (on pourrait aussi en faire un composant).
  • Composant Speed: donne deux points x et y pour exprimer une vitesse par seconde sur l’axe X et l’axe Y.

Tous ces composants inclus dans l’entité seront analysés et seront utilisés par les systèmes qui en ont besoin. Par exemple, le composant Speed pourrait être utilisé par un Move System qui serait fait pour mouvoir l’entité dans le plan. Le Pattern ECS donne vraiment BEAUCOUP de possibilités !

Lire l’article en entier

La Boucle d’Animation (partie 2)

On l’a vu, la boucle d’animation nous permet d’animer nos scènes et d’exploiter nos entités en mettant à jours leurs données.
Evidemment, dans un soucis d’organisation on est obligé d’intégrer tout ça dans une classe qui nous permettra, entre autre, de gérer la boucle ne fut-ce que pour lui adjoindre des méthodes de lancement et d’arrêt (vous verrez que pendant le dev d’un jeu, avoir ces deux méthodes c’est assez utile pour tracker les bugs).

Cela va impliquer pas mal changement dans nos différentes parties de code, en effet notre moteur actuellement ne gère que les entités de type rectangle et franchement ce serait pas mal qu’on puisse faire évoluer tout ça. Sans oublier évidemment que pour l’instant, le déplacement d’une entité par exemple on doit le gérer à la main. On va donc reprendre tout ce qu’on a fait jusqu’à présent, du Resource System à la Boucle d’Animation. Si vous n’avez pas encore lu les articles précédent, je vous invite à le faire.

Lire l’article en entier