Ça fait un moment que je n'avais pas fait le point ici, et pour cause : j'avais la tête dans le code ! Depuis la v0.6.0, Dina Game Engine a littéralement changé de dimension. On est passé d'un éditeur qui posait ses bases à un outil qui commence vraiment à ressembler à ce que j'avais en tête dès le départ. Couleurs, polices, menus configurables, composants de scène, plan de tests… il y a eu du boulot. Je vous résume tout ça.
Sommaire
- Les fondations : couleurs et polices — v0.7.0 – v0.8.0
- Premier composant de scène : Text — v0.9.0 – v0.9.1
- Le MenuManager : des menus configurables visuellement — v0.10.0 – v0.10.7
- Badge de scène de démarrage et plan de tests — v0.11.0 – v0.11.1
- Fiabiliser avant d'avancer — v0.12.0
- L'ombrage arrive : ShadowColor et ShadowText — v0.12.1 – v0.13.1
En bref
Depuis la v0.6.0, l'éditeur s'est structuré autour de deux axes : enrichir les fonctionnalités et fiabiliser ce qui existe. Les premières briques incontournables ont été la gestion des couleurs (centralisées dans une classe dédiée PaletteColors pour harmoniser l'ensemble du projet) et la gestion des polices, qui repose dans DinaCSharp sur un système de clés (Key) géré par le FontManager. L'éditeur s'est ensuite doté de ses premiers composants : Text, MenuManager, ShadowText ainsi que d'une interface homogène grâce à des UserControls partagés. Sans oublier un plan de tests structuré qui a débouché sur plusieurs vagues de corrections significatives. En quelques semaines, l'éditeur est passé d'une base fonctionnelle à un outil cohérent, fiable et de plus en plus expressif.
1. Les fondations : couleurs et polices (v0.7.0 – v0.8.0)
Avant de pouvoir créer des composants visuels, il fallait poser les fondations : savoir gérer les ressources partagées d'un projet. C'est exactement ce que règlent les versions v0.7.x et v0.8.0.
Pour les couleurs, j'ai opté pour une classe dédiée (PaletteColors) qui centralise toutes les couleurs du projet. L'idée est simple : plutôt que de disperser des valeurs hexadécimales dans tout le code, on définit une palette une fois pour toutes et on y fait référence par nom. Depuis l'éditeur, on peut ajouter, modifier et supprimer des couleurs, et le fichier PaletteColors.Designer.cs est régénéré automatiquement.

Liste des couleurs disponible
Pour les polices, le système repose sur le FontManager de DinaCSharp, qui centralise le chargement des polices via un système de clés typées (Key). Depuis l'éditeur, on configure ses polices, et le moteur génère les fichiers SpriteFont à plusieurs résolutions ainsi que le fichier FontKeys.Designer.cs qui expose toutes les clés. La police Roboto est même embarquée dans les templates pour démarrer sans rien configurer. Fini les allers-retours manuels dans Visual Studio.

Fenêtre de création d'une nouvelle police avec recopie automatique du fichier .ttf dans le projet
Cette version inclut aussi une refactorisation architecturale importante — la hiérarchie ItemViewModel/EditorViewModel — qui clarifie la séparation des responsabilités dans l'éditeur et qui servira de socle pour tous les composants à venir.
2. Premier composant de scène : Text (v0.9.0 – v0.9.1)
La v0.9.0 est une petite étape symboliquement grande : le premier composant d'une scène éditable visuellement. Il s'agit du composant Text, qui permet d'afficher du texte dans le jeu avec le code de génération correspondant.
La v0.9.1 lui ajoute ses propriétés configurables — position, police (issue de la palette définie en v0.8.0), contenu, couleur (issue de PaletteColors) — directement depuis le panneau de propriétés de l'éditeur. C'est le début d'un système de composants qui va s'étoffer rapidement.

Composant Text sélectionné et son panneau de propriétés.
3. Le MenuManager : des menus configurables visuellement (v0.10.0 – v0.10.7)
C'est la fonctionnalité la plus dense de cette série de versions, et probablement celle dont je suis le plus content. L'objectif : pouvoir configurer un menu principal de jeu entièrement depuis l'éditeur, sans écrire une seule ligne de code.
La v0.10.0 pose les bases avec le composant MenuManager et ses MenuItems — les entrées cliquables du menu. Derrière cette interface simple se cache un système de génération de code précis : chaque modification régénère les sections ciblées du Scene.Designer.cs grâce à un système de zones balisées, sans jamais toucher au code utilisateur.
Les v0.10.2 à v0.10.4 finalisent les propriétés des MenuItem et renforcent la robustesse des générateurs de code pour les rendre fiables en conditions réelles.
La v0.10.5 ajoute les propriétés du MenuManager lui-même, et introduit une bibliothèque de UserControls partagés — LabeledTextBox, LabeledComboBox, LabeledCheckBox, Vector2InputView — réutilisables dans tous les panneaux de propriétés de l'éditeur. La v0.10.6 migre l'ensemble des vues existantes vers ces nouveaux contrôles, homogénéisant l'interface de bout en bout.
Enfin, la v0.10.7 finalise les MenuTitles — les titres de section qui structurent visuellement les menus — avec leurs propres propriétés configurables.

MenuManager avec titre et items
4. Badge de scène de démarrage et plan de tests (v0.11.0 – v0.11.1)
La v0.11.0 apporte quelque chose de concret et d'immédiatement utile : la sélection de la scène de démarrage depuis la vue ProjectHome. Un badge visuel identifie clairement quelle scène se lancera en premier, et un simple clic suffit pour en changer. L'information est persistée dans le dina.project.json.

📸 Vue des scènes avec la scène Main Menu comme scène de démarrage (badge "startup").
Mais l'apport le plus structurant de cette version est peut-être invisible à l'écran : la mise en place d'un plan de tests structuré. Tester un éditeur qui génère du code, c'est particulièrement délicat — il faut vérifier l'interface ET l'exactitude de chaque fichier généré. Ce plan pose les bases d'une validation rigoureuse pour toutes les versions à venir. La v0.11.1 en est la première récolte : un lot de corrections ciblées sur les problèmes identifiés.
5. Fiabiliser avant d'avancer (v0.12.0)
J'aurais pu continuer à ajouter des fonctionnalités, mais j'ai préféré m'arrêter pour corriger en profondeur. La v0.12.0 est entièrement dédiée à la qualité :
- Le bouton Apply met maintenant correctement à jour les
MenuItem et Title dans le Scene.Designer.cs
- La sélection/désélection d'un projet récent fonctionne de façon fiable
- Un bug dans la génération des titres d'un
MenuManager produisant du code incorrect a été corrigé
- La gestion du badge de scène de démarrage a été entièrement refondée
- Les messages parasites à la compilation dans Visual Studio sur les projets générés ont été supprimés
Ce genre de version est moins spectaculaire à annoncer, mais c'est elle qui fait la différence entre un outil qu'on utilise avec confiance et un outil qu'on utilise en croisant les doigts.
6. L'ombrage arrive : ShadowColor et ShadowText (v0.12.1 – v0.13.1)
La v0.12.1 enrichit le MenuManager avec la prise en charge de la couleur d'ombrage des titres (ShadowColor). Un détail visuel qui change vraiment le rendu des menus générés, et qui illustre bien la direction prise : configurer de plus en plus finement l'apparence du jeu depuis l'éditeur, sans toucher au code.
Les v0.13.0 et v0.13.1 vont plus loin avec un composant entièrement nouveau : ShadowText. Même principe que Text, mais avec une ombre portée configurable en position, couleur et opacité. La v0.13.0 pose les bases du composant, la v0.13.1 y ajoute la fenêtre d'ajout dédiée (AddShadowTextWindow) et corrige la suppression de ce type de composant depuis l'éditeur.

Composant ShadowText et ses propriétés
Comme toujours, vos retours sont les bienvenus : que ce soit pour signaler un bug, proposer une idée, ou simplement dire ce que vous en pensez !