Comment architecturer un projet MonoGame pour ajouter des extensions à l'infini ?

Créé le : 2024-03-18
Dernière mise à jour : 2024-03-18


Objectif du tutoriel

Ce tutoriel a pour objectif de vous décrire les différentes étapes pour créer un projet MonoGame vous permettant de pouvoir rajouter des extensions à l’infini et le tout, sans devoir refaire votre principal.

Dans notre cas, nous allons supposer que notre jeu « MonJeu » doit contenir des campagnes et que nous voulons pouvoir en rajouter facilement.

 

Étape 1 - Création des projets

Création du projet principal

Pour votre projet principal, vous faites comme d’habitude :

 

J’ai pour habitude de toujours prendre un projet utilisant OpenGL mais cela fonctionne aussi si vous prenez un autre type de projet.

 

Ici, vous pouvez placer la solution et le projet dans le même répertoire ou pas (je préfère avoir un répertoire différent)

 

Solution Interfaces

Cette solution va vous permettre d'avoir un élément en commun entre votre projet de jeu et vos futures campagnes.
C'est le projet le plus important de tous !

Pour cela, il faudra sélectionner le modèle "Biblitohèque de classe".

 

Je vous recommande de le nommer Interfaces car il ne contiendra que des interfaces, pas de classes ni structures.

 

Comme MonoGame utilise le framework .Net 6.0, il faut que notre bibliothèque soit compatible.

 

Solution Campagnes

Nous allons créer une nouvelle solution, pas simplement rajouter un projet car nous voulons pouvoir générer notre extension de manière indépendante, tant du point de vue du code que du point de vue du Content (images, sons, spritefont, etc.).

 

Ajout des projets dans la solution du jeu

Maintenant que tous nos projets sont en place, nous allons mettre à jour notre projet de jeu.
Toutes les autres manipulations pourront être faites à partir du projet de jeu et seront répercutées dans les autres projets.

Pour rajouter un nouveau projet, il suffit de faire un clic-droit sur la solution puis "Ajouter" et sélectionner "Projet existant...".
Vous pouvez également passer par le menu "Fichier > Ajouter > Projet existant...".

 

Compilation des Content de chacun des projets indépendamment

Pour faire un test, nous allons rajouter des images dans le Content du projet Campagnes ainsi que dans celui du projet MonJeu.
Dans mon cas j'ai rajouté Project_Creation_09.png dans Campagnes et Project_Creation_08.png dans MonJeu.

 

En regardant les traces du Build, on s'aperçoit que seul Project_Creation_08.png a été traité.
L'image Project_Creation_09.png n'a pas été compilée par mgcb-editor.

Pour corriger cela, nous allons devoir rajouter le package NuGet "MonoGame.Content.Builder.Task"

 

Maintenant, si nous lançons à nouveau la génération, nous voyons bien nos 2 fichiers PNG dans les traces (Project_Creation_08.png a été ignoré car il avait déjà été traité).

 

Étape 2 - Copie des fichiers du projet Campagnes vers le dossier de sortie du jeu

Ordre de la génération des projets

Avant de faire la recopie, nous allons devoir indiquer l'ordre dans lequel les projets sont compilés.

Dans notre cas, nous voulons compiler les projets dans cet ordre :

  1. Projet Interfaces
  2. Projet MonJeu
  3. Projet Campagnes

Pour cela, il faut aller dans le menu "Projet > Ordre de la génération du projet..."

Dans l'onglet "Dépendances", sélectionner le projet "Campagnes" et cocher les cases devant le projet "Interfaces" et le projet "MonJeu".

Sélectionner ensuite le projet "MonJeu" et cocher la case devant le projet "Interfaces" (la seule option autorisée).

Cliquer ensuite sur le bouton "OK" pour valider tous les changements (l'ordre ne se rafraichit pas automatiquement).

 

Préparation des dossiers de réception

Recopie des fichiers

 

Étape 3 - Chargement des campagnes

Mise en place d'un ServiceLocator

Chargement des campagnes

 

Maintenant, avec tout ça, chacune de vos campagnes (ou extensions de campagnes) peuvent avoir leurs ressources propres !

Merci de m'avoir lu et n'hésitez pas à partager autour de vous.