XY Engine

icône du blog XY Engine

MrSinaf, le

J'ai un peu peur de vous perdre dans tout ça... Donc essayons de donner une simple explication.

SPEngine est développé sur Monogame, Monogame est un framework demandant à travailler sur la mise en place de tout le nécessaire pour la logique d'un moteur de jeu, mais il offrait tout de même un moteur graphique facilitant l'affichage à l'écran tout en imposant certaines contraintes.

XYEngine est un nouveau moteur que j'ai décidé de créer où je n'utilise plus Monogame, je dois alors créer mon moteur graphique, ainsi, maintenant je n'aurai plus aucune limite ou contrainte !

Un projet de zéro ?

Non, le fait de faire XYEngine ne rend pas le projet SPEngine comme étant une perte de temps. À partir du moment où le moteur graphique est créé, je peux tout simplement récupérer les scripts et la logique de SPEngine.

Et SPEngine ?

Abandonné, je vais tout de même garder ses scripts, mais il est tout simplement remplacé par XYEngine, qui vous le verrez me permettra de faire des choses encore meilleurs !

Son développement

Voyons ensemble certaines choses créées et adaptées pour XYEngine, j'ai donc aussi profité comme il a été dit dans mon dernier blog de revoir quelques fonctionnalités que j'avais mis en place dans SPEngine.

Bon, je l'avoue que le nom "SPEngine" était pas top top, donc j'ai trouvé quelque chose à son niveau : "XYEngine".

C'est surtout pour accentuer le fait que je travaille sur un moteur 2D, mais aussi pour donner une référence à mon nom de domaine : sinafproduction.xyz ! J'ai beaucoup hésité à ajouter le 'z' mais ça serait peut-être pour un prochain moteur mais 3D ! (bon... ça risque pas.)

Avez-vous vu le logo de ce blog ? Au cas où :

Logo du blog mais aussi de XYEngine

Si vous ne l'aviez pas remarqué, Sinaf Production a pour 'mascotte' les serpents. Je n'ai pas vraiment d'affinité avec, c'est juste venu tout seul... (et NON aucune référence au langage python, ici, on est ne jure qu'en CSharp)

Et donc, j'ai voulu en faire référence pour ce moteur où le logo XYEngine se tranforme en mignon potit serpent ! (Il ne mord que par amour)

Des shaders

C'est là une chose que je ne maitrise pas du tout, mais qui serait intéressante d'expérimentée. Maintenant que je gère moi même le moteur graphique, j'ai du apprendre comment fonctionne les shaders et comment les utiliser efficacement ne serait-ce que pour afficher un mesh à l'écran.

Un mesh (ou maillage en français) est un model 3D (qui peut aussi être 2D), c'est dans le mesh que toutes les informations sur sa composition sont stockés.

Et je suis content, de pouvoir vous partager ceci (le format gif ne lui fait pas d'honneur) : Hamster colorisé en arc en ciel

Alors oui c'est bien le style qu'aura les hamsters dans le jeu Hamster Life et non ils ne seront pas arc-en-ciel, ce n'est qu'un exemple voyons !

En tout cas, c'est une première tentative réussie que de mettre en place un shader. Comme vous pouvez le voir ça permet principalement de modifier ce qui est visible à l'écran et grâce à ça, ça me permettra de créer des effets intéressants !

Monogame me permettait bien entendu de créer moi-même mes shaders, mais le souci c'est que leur fonctionnement était modifié et ça rendait très difficile d'apprendre comment le tout fonctionne sans y connaitre préalablement les shaders.

C'est moi qui pilote

Là où avec SPEngine j'étais obligé de passer par Monogame pour effectuer quelques actions, il est maintenant possible de gérer le tout moi même. Que ce soit pour la mise en place, son fonctionnement ou comment l'utiliser.

Par exemple pour gérer les textures, j'ai créé ce système moi même et je l'adapte à mes besoin. J'aime beaucoup avoir la possibilité de modifier les pixels d'une texture, donc j'ai pu réaliser ceci :

var texture = Resources.LoadTexture("texture.png"); // Charge la texture
texture[0, 0] = new Color(255, 0, 0);               // Met la couleur rouge à la position 0x 0y
texture.ApplyPixels();                              // Applique les modifications

Il est techniquement possible de le faire sur Monogame, mais c'est quelque chose d'un peu plus fastidieux.

Debug

Débugage est une étape très importante et parfois très fastidieuse.

"Le plus dur dans la programmation, ce n’est pas d’écrire du code, c’est de corriger les bugs."

Bill Gates

Un moteur de jeu comme unity est plutôt efficace, tu as par exemple une caméra d'éditeur permettant de voir ce que le joueur ne peut pas voir, mais aussi une fenêtre : "inspecteur"

La fenêtre d'inspection dans unity

Elle permet de vérifier et de paramètrer les données des éléments présents dans notre jeu. Par exemple, on pourrait surveiller la position du joueur alors qu'elle n'est pas affiché directement dans le jeu et même tout bêtement la modifier pour le téléporter.

ImGUI

Et c'est alors là qu'il existe une solution permettant de créer ce genre de fenêtre (au passage Unity s'en est beaucoup inspiré, même si maintenant son fonctionnement est différent) qui est ImGUI !

Exemple d'un projet utilisant ImGUI. (source)

Nous verrons l'utilisation de tout ça dans des cas plus concret, mais être sorti de Monogame m'a permit d'y ajouter ça plus simplement.

Hamster Life

Dans mon dernier blog, j'ai pu vous parler du développement d'hamster life et il a été naturellement ralenti. Mais maintenant il reprend (ou du moins commence).

Quand même, vous avez eu quelque chose en plus concernant les hamsters, maintenant vous savez à quoi ils vont ressembler. Bon j'avoue que ce n'était pas tellement une surprise pour ceux présent dans le serveur discord.

Les hamsters

Je vais tout de même vous donner une info en plus (même si vous l'aviez sans doute deviné) : Les hamsters seront personnalisables.

J'entends par là qu'ils auront des couleurs générées, ainsi on pourrait imaginer qu'un hamster noir puisse accoupler avec un blanc pour donner du gris. Ou même rendre ça plus intéressant en prennant un pourcentage de chacun par exemple :20% du blanc et 80% du noir donnerait du gris foncé.

Il faut ensuite imaginer ça avec une multitude de couleur, ça donne beaucoup de possibilité et en plus de ça, ça pourrait devenir une contrainte pour certain client. Ils pourraient demander des hamsters d'une couleur précise ou des hamsters plus ou moins foncés. Ainsi, il faudra faire attention de ne pas vendre n'importe quel hamster !

Et il faut aussi se dire que les hamsters ne seront pas forcément avec une couleur unie. Il pourrait y avoir différente formes de couleur pour les hamsters !

Exemple d'un hamster avec 2 couleurs

Le rouge et le vert (et le bleu) sont des "placeholders", ils me permettent de savoir où appliquer les différentes couleurs.

Mais nous verrons ça dans de prochains blogs, parlant réellement de l'avancer de ce projet !


Je me suis un peu ralenti sur le fait de quitter Monogame, mais c'était crucial pour me permettre d'en apprendre plus. J'en parlerais plus tard, des moyens pour optimiser certaines choses.

Ce qui me fait un peu peur, c'est de mettre un peu de temps avant de vous sortir un prochain blog concernant Hamster Life, pas à cause du fait de développer XYEngine, mais j'ai tout bêtement d'autre occupations (comme jouer).

❤️ Merci pour votre lecture ❤️