Utilisation du plugin MonoGame pour MonoDevelop 4.x sous Linux

Un des atouts du Framework XNA est la génération du contenu sous forme de fichier xnb. Concrètement lorsque vous compilez un projet XNA sous Windows avec Visual Studio, vos ressources (images, son, musiques, modèles, etc…) sont transformés dans un autre format que seule une application XNA peut décrypter. Ces fichiers xnb contiennent des informations sur la ressource qu’ils embarquent, pour une image cela va être le format de compression, pour un modèle ça sera le type d’effet à utiliser. Le projet MonoGame a mis en place dans un premier temps une méthode pour exploiter les xnb mais il était jusqu’alors impossible d’en créer. Pour ça il fallait obligatoirement passer par une session Windows avec Visual Studio, créer un projet bidon et compiler son contenu.

Récemment l’équipe du projet à mis au point un petit programme en ligne de commande qui permet de construire des fichiers xnb, ce n’est pas encore totalement au point mais ça fonctionne. A côté de ça, le code qui a servi à créer ce programme a été utilisé pour réaliser un plugin pour MonoDevelop (heu.. Xamarin Studio). Malheureusement le plugin n’est disponible officiellement que pour Windows et Mac OSX. Mono et sa suite n’étant pas considérés comme assez prioritaires, il ne sont pas à jour sur beaucoup de distributions. En parallèle Xamarin Studio qui est un EDI basé sur MonoDevelop n’est pas disponible directement pour Linux, la société Xamarin ayant jugé que le marché n’était pas sur Linux mais sur Mac et Windows.. Heureusement Xamarin Studio est basé sur MonoDevelop qui lui est Open Source et qui fonctionne encore sous Linux.

Nous allons voir aujourd’hui comment utiliser MonoDevelop 4.x sous Linux avec le plugin MonoGame Linux (que votre serviteur a porté pour vous). A l’heure actuelle ma pull request est en validation et si tout ce passe bien le plugin devrait être téléchargeable depuis le site du projet MonoGame. En attendant vous pouvez le télécharger ici, je le mettrais à jour continuellement tant que mon port ne sera pas officialisé sur la branche principale du projet.

1. Installation du plugin

Dans un premier temps je vous invite à lire mon précédent article qui vous explique comment vous mettre à jour sous Linux avec Mono, MonoDevelop et MonoGame. Ensuite je vous invite à récupérer le plugin.

Installation du plugin
Installation du plugin

Une fois que MonoDevelop est lancé il faut simplement aller dans le menu Outils/Gestionnaire de compléments. De là il faut cliquer sur Install from file… puis choisir le plugin. Une fois validé vous pouvez fermer l’IDE et le relancer. Votre plugin est installé ! Facile non ?

2. Création du projet MonoGame

Commencez par créer un nouveau projet vide et ajouter MonoGame en tant que référence, pour cette fois-ci j’utilise MonoGame.Linux (la version OpenTK) mais ça marche aussi très bien avec MonoGame.SDL2. Ajoutez donc un peut de code, disons celui là..

 using System;
 using Microsoft.Xna.Framework;
 using Microsoft.Xna.Framework.Content;
 using Microsoft.Xna.Framework.Graphics;
 using Microsoft.Xna.Framework.Input;

 namespace MonoGameContentProject
 {
     class MGGameContent : Game
     {
         SpriteBatch spriteBatch;
         GraphicsDeviceManager graphics;
         Texture2D logo;

         public MGGameContent()
             : base()
         {
             graphics = new GraphicsDeviceManager (this);
             Content.RootDirectory = "Content";
             graphics.PreferredBackBufferWidth = 800;
             graphics.PreferredBackBufferHeight = 600;
             Window.Title = "MonoGame Content on Linux";
         }

         protected override void LoadContent()
         {
             base.LoadContent ();
         }

         protected override void Update(GameTime gameTime)
         {
             base.Update(gameTime);

             if (Keyboard.GetState ().IsKeyDown (Keys.Escape))
                 Exit ();
         }

         protected override void Draw(GameTime gameTime)
         {
             GraphicsDevice.Clear (Color.Black);
             base.Draw (gameTime);
         }

         public static void Main (string[] args)
         {
             using (var game = new MGGameContent ())
                 game.Run ();
         }
     }
 }

C’est relativement basique et c’est le code de base d’une application XNA. Si vous compilez vous verrez une belle fenêtre en 800×600 toute noir.

3. Le projet de contenu

Nous allons ajouter le projet de contenu pour construire des xnb depuis une image maintenant. Sur la solution faites un clique droit puis ajouter/projet. Dans la fenêtre qui s’affiche choisissez Linux

Ajout du type de projet de contenu
Ajout du type de projet de contenu

Maintenant vous pouvez ajouter tout votre contenu à compiler en xnb dans ce projet. Pour le moment les images au formats bmp et png sont supportées. Vous pouvez aussi ajouter des fonts. Par exemple il est facile d’ajouter un SpriteFont, il faut cliquer sur menu fichier/nouveau, puis MonoGame/SpriteFont !

Si vous compilez votre projet tout suite ça ne fonctionnera pas car il faut indiquer à MonoDevelop que vos ressources doivent être compilées, ce qui lors de la compilation de la solution va lancer une tâche de build spécifique, fabriquant les fichiers xnb.

Il faut marquer les assets comme compilable
Il faut marquer les assets comme compilable

Pour les SpriteFont il faut en plus copier à côté de votre fichier SpriteFont la police que vous voulez utiliser, celle-ci doit être au format TTF. Une fois la compilation terminée, vous pouvez vous rendre dans le dossier bin du projet de contenu et vous y verrez des fichiers xnb. Il ne vous reste plus qu’à les utiliser dans votre projet actif !

Et le résultat final !
Et le résultat final !

4. Conclusion

Le projet MonoGame continu son avancée sur les traces de XNA en proposant un plugin réellement utile. Il est vrai que revenir sous Windows et installer Visual Studio n’était pas forcément pratique pour tout le monde. J’espère que cet article vous sera utile et qu’il vous aura donné goût pour tenter l’aventure MonoGame sous Linux, car croyez moi c’est une aventure ! Parsemée d’embûches et de trolls, mais ça vaut clairement le coup de pouvoir revendiquer que l’on développe un jeu en C# sous Linux sans aucune béquille ! Les prochaines étapes seront la gestion du son, de la musique, des effets et des modèles, une fois que ça sera en place nous pourront nous passer de Visual Studio et de XNA 4.0.