Il existe une grande variété de façons de procéder; Je vais suggérer les choix «évidents pour moi», mais il existe de nombreuses variantes qui pourraient être conçues. Avertissement: je n'ai en fait rien implémenté de ce genre.
Tout d'abord, vous avez besoin d'une structure de données qui couvre votre monde. Si vous effectuez un mouvement de PNJ dans un espace 3D, vous avez probablement, ou aurez éventuellement besoin, d'une telle structure à des fins d'orientation - par exemple, un maillage de navigation. Supposons donc que nous pouvons ajouter un champ pour les parfums à cela.
Alors, que mettons-nous dans ce domaine? Je propose une liste de records ( parfum , force , temps ). Cette liste est conservée à une longueur maximale ou inférieure à celle-ci, et triée par force - les odeurs faibles seront donc éliminées. Le parfum peut être soit quelque chose explicitement défini pour chaque entité ou type d'entité, soit simplement le type d'entité - selon ce que vous voulez pouvoir suivre distinctement. L' heure est un horodatage de la dernière mise à jour de cet enregistrement de parfum.
Lorsqu'une entité traverse une zone (par exemple un triangle donné du maillage de navigation), il est temps de mettre à jour la liste des parfums. Tout d'abord, diminuez toutes les forces en fonction du temps passé en fonction de la valeur temporelle par rapport à l'heure actuelle - la décroissance exponentielle est probablement un choix raisonnable ici. Ajoutez ensuite le parfum de l'entité actuelle à la liste, peut-être avec une force dépendant du type d'entité. Ensuite, si la liste est trop longue, jetez la force la plus faible.
Pour obtenir un résultat de suivi, recherchez l'odeur dans la liste pour l'emplacement actuel, puis faites de même pour tous ses voisins, et allez dans la direction de l'odeur la plus forte (ce n'est pas la direction d'où vient le traqueur).
Pour plus de réalisme:
Diffusion: transférez périodiquement une fraction du parfum de chaque emplacement à ses voisins. Cela confond les sentiers, mais signifie également que les objets stationnaires peuvent être flairés (trouver de la nourriture, des cadavres, etc.). (C'est même une sorte d'IA reconnue pour baser entièrement ses actions sur ce type d'informations - le paysage fournit des informations sur la voie à suivre pour obtenir une ressource particulière, etc. J'oublie son nom.) Le principal inconvénient est le temps passé calculer la diffusion partout.
Les odeurs fortes devraient empêcher la détection des odeurs faibles; divisez la force du parfum recherché par la force du parfum le plus fort et échouez s'il est trop petit. Cela pourrait permettre de confondre délibérément sa trace de parfum.