Il est au fait logique d'écrire des blogs directement destiné au développement de mon moteur de jeu 2D. A la base, j'en parlais dans les blogs destiné au développement d'un jeu sur le moteur, mais évidemment ce n'était pas très efficace.
Et pour bien commencer, reprennons de zéro !
XYEngine
XYEngine est un moteur que je développe dans l'objectif de découvrir le développement de jeux vidéo au bas niveau.
Bien que ce soit un moteur de jeu, il n'a pas pour objectif de contenir un éditeur, comme on peut le retrouver sur Unity, Unreal Engine ou Godot. Ce qui rend la création d'un jeu vidéo exclusivement dans le code. Et me permet aussi de me faciliter grandement la tâche concernant son développement.
Objectifs
Principalement, c'est un moteur 2D que je développe pour moi et mes projets. Ainsi, j'apprends le développement de très bas niveau, mais aussi je peux développer des jeux vidéo qui me tiennent à coeur.
Ce que je souhaite, c'est aussi faciliter le travaille sur des jeux procéduraux. Les moteurs de jeux actuels ne sont pas très efficace sur ce niveau là. Bien que ce soit possible tout n'est pas adapté pour ça et on se retrouve obligé de devoir contourner certaines limites. Je ne prétends pas les surpassers à ce niveau là, mais du moins convenir à mes besoins.
Etre libre. C'est un peu la première raison qui m'a amené à apprendre à créer mon propre moteur de jeu. L'objectif c'est d'avoir toute les libertés que je n'ai pas avec d'autre moteur de jeux.
Développement
Ce moteur de jeu, je le développe naturellement en C#. J'utilise Silk.NET pour pouvoir faire des liaisons vers OpenGL permettant de développer mon moteur graphique.
C'est mon projet principal et je le développe seul, mais partage son code source publiquement sur Github.
v0.1.0.0
La première version du moteur est une version mettant en place ses premiers piliers tel qu'un :
- Système de Rendu
- Pipeline de chargement et mise en cache
- Gestion des Scènes et Objets
- Système d'Input
- Système de sons
- Interface Utilisateur (UI)
- Camera
Le tout adapté uniquement pour de la 2D, ce qui optimise un peu plus le travaille concernant les matrices.
Les matrices permettent de combiner plusieurs transformations en une seule opération.
Ce qui veut dire qu'on peut avoir la matrice d'une caméra qui contient alors position, échelle et rotation qui en une seule opération puisse s'appliquer à une matrice pour un model (qui contient aussi position, échelle et rotation).
Dans les moteurs 3D on utilise une matrice 4x4 et ça même pour un rendu 2D. Pour mon cas j'utilise une matrice 3x3 se limitant uniquement à la 2D mais allégeant de façons notable les calcules.
Ce sont des fonctionnalités simples mais importantes pour tous projets que je souhaiterais réaliser avec XYEngine. Bien qu'il soit nécessaire d'y apporter certains ajustements pour améliorer l'expérience du développement et surtout l'optimisation, ça reste une avancé notable et pouvant être utilisé pour réaliser des premiers projets.
Une version stable
La version 0.1 est la première version de XYEngine, sont arrivée a mit un peu de temps à sortir, car il me fallait une base très solide avec :
- Une organisation mis en place dès le départ.
- Une gestion efficace et documenté pour pouvoir implenter XYEngine.
- Un template facilitant la compréhension pour l'utilisation du moteur.
- Et surtout une version pouvant être utilisée en tant que telle pour un projet complet.
Naturellement, il est possible de rencontrer quelques problèmes que j'essayerais de corriger au plus vite pour une sortie en Release. Mais normalement, dans l'état actuel le moteur est fonctionnel. Et sera utilisé pour développer la première version de HamsterLife.
Avant tout ça
Je travaillais sur le moteur XYEngine et même je vous en parlais bien avant ce blog, mais j'étais arrivé sur quelques difficultés. La raison : Une mauvaise organisation.
J'ai déjà pu m'essayer sur Monogame et j'ai pu avoir un super résultat car j'ai réussi à développer un petit jeu comme il a été prévu : Minesweeper Basic. Bien que Monogame soit intéressant, il a déjà son moteur graphique, d'où je me suis tourné vers Silk.NET.
Mais même si pour moi je me lançais pleinement sur le développement, j'essayais encore beaucoup de chose. Ce qui m'a amené à m'éparpiller dans tous les sens et surtout à ne faire que ce dont j'avais besoins sur le moment même. J'essayais tout de même de bien faire, mais finalement, ça devenait chaotique si je devais modifier un seul élément.
Une refonte total
Au début de ce blog j'ai pu dire "Et pour bien commencer, reprennons de zéro !" et bien ça a été littérallement le cas.
J'ai entièrement tout revu pour permettre cette fois-ci d'avoir quelque chose de beaucoup plus solide. Bien que ça concernait surtout le moteur graphique. Et c'est même pour cette raison que le repository du moteur sur Github a été remit à zéro.
Bien entendu, rien n'était perdu sur ce que j'avais pu réaliser jusqu'à aujourd'hui, par exemple le système d'UI était très solide et ça a été même la chose dont j'avais le plus travaillé. Je l'ai alors intégré à cette nouvelle version, sans y ajouter trop de modification.
Cette fois-ci, il est beaucoup plus modulable et au lieux de développer une version en même temps qu'un projet, j'ai décidé de développer une version du moteur qu'un projet va en dépendre.
C'est quelque chose qui a pris aussi beaucoup de temps, car il fallait une version vraiment très solide, qui demandera surement quelques ajustements sur les jours à venirs.
Le futur
J'ai essayé au mieux de trouver une direction solide pour le moteur, mais ça reste assez compliqué car il est difficile de prévoir mes besoins en avance. J'essaye au maximum d'éviter cela, mais certain ajouts pourraient demander des refontes totales de certaines fonctionnalités. Espérons que ça n'arrive pas x)
En tout cas, pour le moment je me concentre sur le développement 'step-by-step', l'objectif est d'avancé petit à petit avec les besoins que j'ai sur le moment. Et pour la prochaine mise à jour (v0.2), je pense ajouter :
- Un ImGUI de déboguage et d'inspection.
- Un Label avancé.
- Une gestion sonore avancé.
- Une gestion des assets améliorée.
C'est bien-sûr une liste qui n'est pas définitif, cela dépendra des besoins et des difficultés rencontrés !
Pour le moment le moteur est en "Preview" pour tester efficacement les fonctionnalités créées. La sortie en "Release" arrivera quelques temps après...
Ca fait très longtemps que je n'ai pas sorti de blog ET S'EN FOUS !
Bisous et bonne année 2025 <3.