Essayer d'envelopper ma tête autour des moyens de gérer correctement les collisions dans un jeu conçu autour de composants.
Je vois que de nombreux exemples ont une sorte de PhysicsComponent
qui est ajouté à la liste des composants de l'entité, mais la mise en œuvre réelle me déroute.
Pour que cela fonctionne, il PhysicsComponent
faudrait avoir accès au monde qui l'entoure. Cela n'a pas de sens intuitif pour moi. Un composant ne devrait-il pas ignorer non seulement son conteneur (l'entité), mais le conteneur de son conteneur (le monde)?
Pour moi, il semble que le niveau ou la scène devrait maintenir une liste de ces entités et chaque mise à jour du jeu, parcourir les entités pour déterminer celles qui entrent en collision.
Ma question est d'une part, s'il s'agit ou non d'une bonne conception, et d'autre part, comment déterminer quelles entités peuvent entrer en collision. Je suppose que des entités solides pourraient implémenter une interface IRigidBody vide afin que le niveau puisse déterminer quelles entités dans la liste prennent en charge la collision. Mais cela rompt-il la conception des composants?
Au lieu de cela, devraient-ils contenir un composant RigidBody vide? Cela peut en fait être mieux car il n'est pas toujours vide et cette approche est plus pérenne. Le seul problème avec cela est la complexité. La scène devrait parcourir non seulement toutes les entités, mais aussi les composants de chaque entité pour déterminer si elle avait ce composant RigidBody.
Troisièmement, lorsqu'elles entrent en collision, les deux entités doivent être informées d'une manière ou d'une autre et je ne sais pas trop comment y parvenir.
Disons que les deux entités contenaient un HealthComponent et lorsqu'elles entraient en collision, leur santé serait diminuée d'une valeur arbitraire, 5. Je suppose que ce serait la responsabilité de la scène de gérer cela lorsqu'elle détecte une collision entre deux entités?
Mais alors la scène est-elle trop responsable? Je pouvais voir cela devenir incontrôlable et devenir difficile à gérer lorsque la scène est responsable de nombreuses choses auxquelles les entités ne devraient pas (?) Avoir accès.
Modifier: question mise à jour avec plus de détails.