Je mets à jour ma réponse parce que beaucoup de choses n'étaient pas claires avant les commentaires. Veuillez me dévoiler pendant que j'explique mes pensées.
En général, deux aspects clés à considérer dans toute conception sont la cohésion et le couplage . Nous savons tous que nous avons besoin d'une forte cohésion et d'un faible couplage pour pouvoir réaliser une conception plus réutilisable et extensible.
Donc, si le monde doit tout gérer, cela signifie qu'il a une faible cohésion et un couplage étroit (car il doit tout savoir et tout faire). Cependant, c'est également le cas lorsqu'une entité de jeu doit tout faire. Mettre à jour son emplacement, rendre sa texture, etc. etc.
Ce qui vous intéresse vraiment, c'est de créer des systèmes qui se concentrent sur un aspect de l'entité. Par exemple, une entité de jeu pourrait avoir une texture, mais un rendu serait responsable de rendre cette texture à l'écran. Le Renderer ne se soucie pas des autres propriétés de l'entité.
En allant un peu plus loin, une entité de jeu est simplement un sac de propriétés. Ces propriétés sont manipulées par des systèmes qui se concentrent sur des propriétés spécifiques. Et c'est là qu'interviennent les systèmes d'entités basés sur les composants (CBES), où propriétés = composants.
Plus précisément, CBES avec des systèmes (ou sous- systèmes ). Cette conception a tendance à avoir quelques systèmes qui se concentrent sur des composants spécifiques d'une entité sans se soucier des autres composants de l'entité. De plus, les systèmes sont couplés uniquement avec les informations dont ils ont besoin pour traiter ces composants.
Prenons votre exemple. Étant donné que l'entrée de l'endroit où déplacer l'entité est basée sur le contrôleur du joueur, vous auriez probablement un PlayerControllerSystem. Ce système contrôlerait, à part bien d'autres choses, le composant de position de l'entité. Dans ce cas, le PlayerControllerSystem aurait besoin de connaître le Level et le PositionComponent. Si plus tard vous décidez d'ajouter la détection de collision, vous créeriez un CollisionSystem qui utiliserait à nouveau la position des entités, mais cette fois pour calculer les boîtes englobantes (ou vous pourriez avoir un BoundingBoxComponent, votre appel). Le fait est que vous pouvez facilement activer ou désactiver le comportement (même à la volée) en ajoutant / supprimant simplement des composants. Ainsi, plus de comportement signifie que plus de systèmes manipulent les composants d'une entité, mais ils sont tous dans une classe bien définie avec un faible couplage. Vous voulez des scripts? Ajoutez un composant ScriptComponent. BAM! Vous venez d'ajouter des capacités de script avec 2 classes. La physique? Du son? Encore le même.
Donc, la raison pour laquelle je préconise CBES avec les sous-systèmes est qu'il est parfaitement OO et un système global facilement maintenable / extensible. L'ajout d'un comportement à une entité est aussi simple que de décider quelles données ce comportement a besoin et quelles entités en ont besoin.
Pour plus d'informations sur les systèmes d'entités basés sur des composants avec des sous-systèmes, il existe une excellente série de billets de blog par T = Machine chez Entity Systems qui sont l'avenir du développement MMOG . L'auteur est même allé jusqu'à créer un wiki pour collecter diverses implémentations nommé Entity Systems Project
Un poste général (et bien connu) sur les systèmes d'entités basés sur les composants en général est Evolve your hierarchy qui a créé le système pour Tony Hawk Pro.
Enfin, si vous cherchez une bibliothèque avec un exemple de code, n'allez pas plus loin que la bibliothèque Artemis . Artemis est principalement en Java mais voici un port en C # (que j'utilise actuellement dans mon projet XNA).
Actor
savoirworld
du tout?