Questions à propos de l'Entity Component System

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je suis en train de lire le livre SFML Game Development, et dans le chapitre 3, ils parlent brièvement de l'Entity Component System. C'est celui que j'ai choisi d'implémenter. J'ai donc lu quelques articles et tutoriels, en particulier ceux là :

-http://guillaume.belz.free.fr/doku.php?id=ecs

-http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/

Mais je pense ne pas avoir tout à fait compris. Par exemple, admettons que j'ai un joueur et qu'au début de la partie, il ai 20 points de vie. Il a donc un Component Vivant.

Concrètement, que contient ce component? Des variables, comme pointsDeVie ou estVivant?

D'accord, merci. Mais du coup, si par exemple j'ai deux joueurs, c'est le même composant Vivant? Et si oui, comment sont stockées les données? Parce que pour moi, pour l'instant, c'était le même composant pour tout le monde, mais je me suis rendu compte que là, par exemple, toute les entités n'ont pas le même nombre de points de vie, et j'avoue que je ne sais pas trop comment faire:/

Donc une entité serait plutôt par exemple représentée comme ceci:

1
std::map<unsigned int, std::map<unsigned int, Component>>

que :

1
std::map<unsigned int, std::map<unsigned int, std::shared_ptr<Component>>>

Et aussi, autre question:) Pour l'assignation des IDs, vaut il mieux faire un std::uint32_t, et l'incrémenter à chaque fois ou alors combiner ça avec une fonction appelée lorsqu'on détruit une entité, qui remplit une std::queue d'IDs libres?

Sachant que je ne compte pas faire un MMORPG avec des millions de joueurs, mais pour le principe.

+0 -0

(mon tuto n'est pas réellement un tuto. C'est un début de tuto qui a été arrêter pour cause de manque de temps, avec pas mal de prises de note. Pas étonnant que ça ne soit pas clair)

Il n'y a pas forcement d’implémentation standard d'un ECS, donc cela dépend beaucoup des besoins et de comment on conçoit les choses.

Pour moi, l'approche avec une map n'est pas une bonne idée. Cela implique un héritage de tous tes composants, ce qui te fais retourner sur une approche POO. (Dans l'editeur d'Unity, les composants sont affichees comment enfant des entites - ce qui est effectivement le concept. Mais cela en veut pas dire que en interne, ce soit implementee comme cela).

De plus, je ne vois pas forcement de raison de cette map, a quel besoin elle repond. Du coup, je prefere l'implementation :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
using Entity = size_t;

class XxxComponent {
    Entity m_entity{};
    ... reste des données de chaque component
};

class YyySystem {
    vector<XxxComponent> m_components{};
};
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte