Bonjour à tous, je me présente, LeB0ucEtMistere, aka Arthur D. Je suis actuellement dans des études de mathématiques (prépa maths) et je développe en C++ majoritairement pendant mon temps libre.
Je viens vous présenter mon nouveau projet, en maturation depuis quelques années déjà : Le Simple Game Framework (SGF pour les intimes)
En savoir plus sur le projet
Genèse
Après plusieurs années de programmation et une flopée de programmes plus ou moins avortés, j'ai eu comme tout le monde envie de ma lancer dans le développement de mon jeu vidéo. Et là, comme beaucoup ça a été le drame, à plusieurs reprises ! Mais j'ai pris de la bouteille et j'ai surtout réalisé que faire un bon jeu, ça demande une team de passionnés, du temps (beaucoup) et des outils. J'ai donc (momentanément) laissé tombé l'idée de créer mon jeu pour me lancer corps et âme, ou presque, dans ce projet : créer des outils utiles à la plus grande majorité souhaitant développer un jeu vidéo en C++, en se basant sur la librairie SFML.
Il faut savoir que je ne souhaite pas créer un moteur de jeux à part entière. J'ai donc choisi de me baser sur la SFML. Cependant, après de nombreuses années passées à traîner sur le forum C++ d'OC (oui oui, et j'y suis encore ^^), j'ai constaté que de nombreux débutants (moi y compris) doivent à chaque fois réinventer la roue : gestion des ressources externes (images, textures, musiques, …), gestion de la boucle principale de jeu, import de maps, création d'un ECS, création d'algorithmes récurrents (pathfinding notamment). J'ai donc eu (comme beaucoup avant moi, certes) l'idée de regrouper ces fonctions au sein d'un framework.
Généralités et avancement
Le projet est développé en C++, autour de la librairie SFML. Il sera à terme composé d'un noyau solide comprenant un ECS et un "moteur" de jeu basique (boucle principale, events, statemachine, …). Et autour de ce corps viendront s'adjoindre des modules complémentaires. On pourra imaginer une GUI, un passeur de Lua, un module de scripting, etc …
Actuellement, le projet est en pré-alpha : entendez par là que seul le noyau est commencé et à peu près fonctionnel. Je précise dès maintenant que mes études me prennent beaucoup de temps et que le projet n'avance que pendant les vacances scolaires, et relativement lentement. Je n'ai pas d'échéancier et ne compte pas en avoir ! Certes le projet contient encore très peu de features et tout peut être amené à changer dans les mois qui suivent, mais je suis déjà dessus depuis maintenant 1 an et j'ai envie de partager mon expérience avec la communauté. De plus, j'ai actuellement besoin de retours sur ce que j'ai déjà fait, et j'aimerai avoir votre avis sur plusieurs questions que je me pose quant au développement de certaines features.
Features actuelles (rien n'est 100% fini of course mais ce qui est listé ici est fonctionnel) :
- ECS
- Machine à états
- Boucle de jeu principale
- Gestionnaire de ressources externes
- Spécialisation du gestionnaire pour les classes de bases de la SFML
- Logger paramètrable
- Système d'exceptions
- Tout début de GUI (pour faire des tests)
Je compte prochainement développer (par ordre de priorité) :
- un système de message pour que les systèmes de l'ECS puissent interagir.
- refonte du pipeline de rendu : je ne suis pas du tout heureux de ce qui est fait actuellement, pas assez flexible…
- rafraichissement du code des ressource managers, trop verbeux pour l'utilisateur à mon goût
- optimisation de l'ECS : pool d'entité et autres
- documentation du code
Objectifs
L'objectif numéro un du framework est comme son nom l'indique la simplicité d'utilisation. Il s'adresse principalement aux codeurs débutants dans le monde du jeu vidéo et aux amateurs développant pour leur plaisir. Il n'a strictement aucune visée commerciale. Je veux juste fournir un outil performant et agréable à utiliser. Ce framework ne sera probablement pas un foudre de guerre (du moins surement pas tout de suite) mais je ne compte pas non plus faire de trop gros compromis sur la qualité. Il doit être capable de réaliser un jeu performant !
Je vise pour mon projet une optique d'expansion. A savoir que lorsque la première release stable sera sortie, j'aimerai encourager les développeurs intéressés par mon projet à prendre part à son développement en créant des modules. Nous reviendront à cette idée de modules par la suite. Ce projet devra rester à dimension humaines, pas de machine à gaz ! Ça irait à l'encontre de l'essence même du projet d'ailleurs.
Le projet et son originalité
Comme dit ci-dessus, ce projet vise les amateurs et non pas le commerce. Toutes les sources seront mis sous licence GPL, et seront accessibles.
De plus, j'ai l'intention de rendre le projet modulaire. Comme je le disais plus tôt, je souhaite mettre en place une interface pour que les users puissent facilement ajouter et proposer leurs propres modules, toujours dans une idée de collaboration. Dès que la première release stable sortira, je commencerai le développement de ces genres de modules et pourquoi pas, intégrerai vos propres modules si vous m'en proposez des pertinents. J'ai notamment sur ma to-do liste : les algos de pathfinding, les algos de bruits, un parseur de TMX files, un module de scripting, etc …
Le mot de la fin
Voilà donc le repository GitHub contenant mon code. (pour l'instant, seul la branche develop contient du code) Je remercie tous ceux qui ont pris la peine de me lire jusqu'au bout et j'attends vos retours d'une part sur le concept, et d'autre part sur le code ! J'essaye de produire un code propre et moderne mais je reste un autodidacte et je sais qu'il y a ici des gens bien plus compétents à même de me conseiller. J'en profite d'ailleurs pour remercier tous les gens du forum C++ d'OC qui m'ont permis d'arriver jusqu'ici : entre autres Kssas`Peuk, Jo_Link_Noir, gbdivers, lmghs, bacelar, et j'en oublie surement mais j'ai une pensée pour vous tous Enfin, ce post sera tenu à jour au fur et à mesure de mes avancées, je me servirai aussi du fil comme dev-blog.
PS : punaise ça fait du bien un éditeur markdown qui fonctionne bien ! (cc @OpenClassrooms, ne te sens pas visé)