Bonjour.
Je suis Benoît, Praetonus sur les internets, et j'ai la joie de vous présenter ma réalisation, Mantra.
Fonctionnalités
Mantra est une bibliothèque implémentant la structure Entité-Composant-Système. Comme on peut s'y attendre de la part d'une telle bibliothèque, Mantra permet de définir des composants et des systèmes agissant sur ces composants.
Particularités
La principale distinction entre Mantra et les implémentations les plus courantes d'ECS est que Mantra est entièrement typée statiquement. Cela signifie
- Aucun besoin de polymorphisme, d'allocation dynamique individuelle ou de RTTI pour les composants ;
- Un stockage contigu et un recyclage des composants ;
- Une implémentation plus efficace pour les opérations de recherche et de tri d'entités (benchmark à venir) ;
- La possibilité de contraintes compile-time sur les composants. Ce point est détaillé ci-dessous.
Ces contraintes, exprimées sous la forme de composants primaires et secondaires, forment la seconde particularité. Pour résumer, pour un système donné
- Un composant primaire est modifiable depuis ce système. Un système possède un composant primaire ou aucun (un système sans composant primaire ne peut modifier aucun composant) ;
- Un composant secondaire est profondément immuable depuis ce système. Un système peut posséder un nombre arbitraire de composants secondaires ;
- Un composant ni primaire ni secondaire n'est pas visible depuis ce système (à part pour vérifier sa présence ou son absence).
En l'état actuel, ce système n'a pas d'avantage particulier (à part éviter un minimum la mise en place d'une mauvaise conception), mais se révèlera crucial lors de l'implémentation de l'aspect parallèle de la bibliothèque pour empêcher les possibilités de data-races dès la compilation.
Utilisation
Mantra requiert un compilateur supportant C++14. La bibliothèque est header-only et n'a donc pas besoin d'être compilée à part en amont. Les bibliothèques Boost sont nécessaires au fonctionnement de la bibliothèque.
La documentation de l'interface et un tutoriel basique sont disponibles et peuvent être générés avec Doxygen.
À venir
La plus grosse feature à implémenter est un parallélisme sûr et scalable. Aucune date n'est prévue de ce côté.
Je compte également ajouter des fonctionnalités à l'interface présente, notamment pour la recherche et le tri d'entités.
Licence
Mantra est distribuée sous licence CeCILL-B.
Merci de m'avoir lu, n'hésitez pas à essayer la bibliothèque et à me donner votre avis sur l'interface et l'implémentation. Si vous rencontrez un problème, ce sujet et les issues sont disponibles.