Project Elyria
Projet Elyria est un RPG 3D low-poly reposant sur un moteur de jeu propriétaire entièrement développé en C#. Conçu avec une architecture EC (Entity-Component), le moteur exploite l'API graphique Veldrid pour le rendu bas niveau et Jolt Physics pour la simulation physique. Le projet se démarque par la création d'un éditeur de niveau sur mesure (avec recompilation à la volée) et d'un système d'interface utilisateur déclaratif matériellement accéléré, basé sur un parseur XML et un arbre DOM manipulable en C#.
Projet Elyria : RPG 3D Low-Poly et Moteur de Jeu Propriétaire
Projet Elyria est un jeu de rôle (RPG) 3D low-poly propulsé par un moteur de jeu sur mesure développé intégralement en C#. Ce projet ambitieux démontre une maîtrise approfondie de l'architecture logicielle, de la programmation bas niveau et de la création d'outils de développement (tooling) complexes.
Architecture du Moteur (Engine)
Le cœur du projet repose sur une architecture modulaire et orientée données, séparant distinctement la logique de jeu, le rendu graphique, la physique et l'outillage.
- Rendu Graphique (Veldrid) : Implémentation d'une API de rendu bas niveau en C# avec Veldrid. Gestion personnalisée des shaders (Vertex/Fragment), des tampons (Vertex/Index buffers) et d'un pipeline graphique 3D complet incluant le rendu des ombres (Shadow Mapping) et un Debug Renderer.
- Moteur Physique (Jolt Physics) : Intégration complète de la librairie Jolt Physics. Création d'une surcouche C# gérant les RigidBodies, le raycasting et les abstractions de collisions (Box, Capsule, Mesh).
- Système d'Entités et Composants : Architecture souple basée sur des scènes (Scene), des objets (GameObject) et des composants modulaires (Component). Le système intègre un sérialiseur JSON sur mesure pour la sauvegarde et l'instanciation des Prefabs.
- Réseau : Implémentation d'une architecture client-serveur robuste posant les bases des interactions multijoueurs.
Système d'Interface Utilisateur (UI)
Afin de s'affranchir des limitations classiques, le moteur intègre un système d'interface utilisateur propriétaire, déclaratif et matériellement accéléré.
- Parseur XML et Arbre DOM : Les interfaces sont définies de manière déclarative via des fichiers XML puis converties en un arbre DOM dynamique. Le registre de nœuds permet d'enregistrer et d'instancier de nouvelles balises dynamiquement depuis la logique de jeu.
- Système d'Événements : Gestion complexe des interactions (Hover, Click, Drag & Drop, Focus clavier). Le système intègre la propagation des événements (Bubbling) pour consommer les actions et éviter les clics à travers de multiples calques superposés.
- Layout et Rendu GPU : Positionnement dynamique auto-calculé (VBox, HBox) et implémentation du GPU Scissor Test pour le masquage matériel des éléments débordants dans les vues défilantes (ScrollView).
- Composants Natifs : Support d'éléments interactifs avancés tels que des champs de saisie (avec gestion de curseur et limitation de caractères), des barres de progression, des cases à cocher et des curseurs ajustables.
Éditeur et Outillage (Tooling)
Pour itérer rapidement sur la création de contenu, un éditeur de niveau complet a été conçu pour interagir directement avec le runtime du moteur.
- Interface Éditeur : Développement de panneaux spécialisés inter-opérants (Hiérarchie, Inspecteur de propriétés, Explorateur de contenu, Console de debug).
- Manipulation Spatiale : Implémentation d'un système de Gizmos pour la traduction, la rotation et la mise à l'échelle visuelle des entités directement dans la vue 3D.
- Auto-Recompilation : Système de Hot-Reload permettant de recompiler les scripts de jeu et d'injecter les modifications de code à la volée, sans relancer l'environnement de l'éditeur.
- Historique des Commandes : Implémentation du design pattern Command pour garantir une gestion asynchrone et robuste des actions d'annulation et de rétablissement (Undo/Redo).