• # Bof

    Posté par . En réponse au lien AI Toolkit, donnez un cerveau à vos NPCs, une librairie C++ header-only. Évalué à -1.

    Vu que le sujet m'intéresse, j'ai jeté un oeil.

    Pour moi, cette lib n'a que peu d'intérêt, parce que:

    • C++20 obligatoire. Pas mal de codebases n'autorisent pas C++20 (pour différentes raisons. Par exemple, daemon-engine est limité à C++14 par la dépendance a google NaCl, mais on peu aussi citer recast-navigation qui se limite a C++11, pour leurs propres raisons).
    • STL utilisée, et pour de mauvaises raisons en plus. La STL, c'est gros, c'est lent à compiler, c'est chiant a debugguer, le contrôle sur la mémoire est pénible. Certains par exemple y préférerons EASTL.
    • la maintenance va être compliquée. Ce code utilise auto pour tout et n'importe quoi. Il y a des shared_ptr qui devraient vraiment être des unique_ptr, également.
    • aucun outil. C'est bien d'avoir les briques de base, mais debugguer une IA n'est pas simple. Tant qu'a avoir des dépendances sur la STL, un outil pour charger les données depuis un stockage externe n'aurais pas été de trop. Ces données pouvant ensuite être chargées dans un programme permettant une visualisation, par exemple.

    Bref, je n'ai pas en tête de lib pour remplacer tout, notamment utility et les FSM, mais à choisir: GPGOAP ou behaviortree.cpp qui dispose aussi, de mémoire, d'un outil visuel pour manipuler les BT, me semblent mieux indiqués.

    A noter que je n'ai pas analysé le code de behaviortree.cpp, mais celui de GPGOAP, si.
    Bien que GPGOAP ait la limitation de représenter un "worldstate" sur 64 bits seulement, en réalité 64 états c'est beaucoup.
    Augmenter la taille serait simple, il suffirait d'utiliser un long double, par exemple (128 bits).
    Sinon, normalement le code des IAs de F.E.A.R. est disponible, par l'auteur du concept même de goap.

    Pour ce qui est des outils avec GPGOAP, il est très simple de construire un pseudo fichier de conf qui soit convertible aisément en langage dot (graphviz) pour générer un graph des actions. La lib fournit également des outils pour aider le debug.