Supposons que vous avez un jeu dans lequel de nombreuses entités remplissent certaines fonctions, mais toutes ne sont pas toujours nécessaires ou doivent être prises en compte dans chaque cadre. Le problème concret sur lequel je travaille et dans lequel ce numéro est présent est une simulation détaillée d'un corps, y compris de ses organes.
Dans le jeu, chaque créature a son propre corps qui est séparé en parties plus petites (torse, jambes, etc.) et parfois, ces parties contiennent des organes qui remplissent une fonction spécifique dans le corps. On ne sait jamais vraiment si un organe sert ou a un rôle ou est actif. Après tout, un animal peut avoir l'estomac vide, qui n'a donc besoin de rien digérer. Il serait assez ridicule de vérifier ou de simuler chaque objet dans chaque cadre et très coûteux dès que vous avez plusieurs créatures dans le monde. Je réfléchissais donc à un moyen de différencier intelligemment les objets qui doivent être mis à jour de ceux qui ne le sont pas.
Ce que j'ai proposé semble être une solution au moins satisfaisante. Il crée une simple file d'attente / pile (l'essentiel est que chaque élément soit supprimé dès sa lecture; l'ordre n'est pas important) appelé "pile d'attention" où résident les objets à simuler. Les objets qui nécessitent une attention seraient simplement mis sur la pile ou y sont mis par d'autres objets. Ces objets implémenteraient probablement une interface simple avec une fonction simulate ().
Appliqué à mon exemple de digestion précédent, cela signifierait:
Le joueur choisit quelque chose à manger (supposer que c'est du pain) dans l'inventaire et le met dans la bouche de son personnage. La bouche est ensuite mise sur la pile d'attention. Dans l'image suivante, la bouche est extraite de la pile et sa fonction simulate () est appelée. Comme c'est une bouche, il serait raisonnable de simuler la mastication ici. Cela pourrait durer quelques images dans lesquelles la bouche continue de se mettre sur la pile jusqu'à ce qu'elle décide que la nourriture est prête à être avalée. Dans ce cas, la bouche met le pain mâché dans l'estomac (je sais qu'il ne s'y rend pas directement, mais l'œsophage est laissé de côté pour simplifier), qui est ensuite également placé sur la pile d'attention. Dans la trame suivante, la simulation du processus de digestion est lancée. Et ainsi de suite pour le reste des organes nécessaires.
Un problème prévisible avec ce sont les objets inactifs. Un animal endormi en est un bon exemple. Cela pourrait se faire comme décrit précédemment en gardant l'animal endormi sur la pile et en vérifiant à chaque fois s'il doit se réveiller, mais cela semble inutile, car c'est la seule chose à faire. Pour rendre les objets inactifs plus efficaces, je prévoyais d'ajouter une sorte de planification qui stockerait les tâches à exécuter à une heure spécifique. Si un animal s'endormait, il mettrait un travail à cet horaire qui serait planifié pendant un certain temps après que l'animal se soit endormi. Ce travail prendrait alors soin de remettre l'animal endormi sur la pile d'attention. Maintenant, vous pouvez dire qu'un animal endormi qui ne se trouve pas sur la pile d'attention pourrait ne pas être attaqué par quelque chose parce que son IA n'est pas simulée,
Maintenant, honnêtement, je ne sais pas si cela est encore proche d'une solution élégante à ce problème en raison d'un manque d'expérience. Suis-je près de quelque chose utilisable? Comment cela se fait-il habituellement ou quelqu'un a-t-il des suggestions ou de meilleures solutions?