15 novembre 2021

Système de packages d'Evergine

La réutilisabilité est un concept très répandu dans le développement logiciel et, en tant que développeurs, nous cherchons toujours des moyens d'isoler des parties de notre code pour créer des bibliothèques, des extraits de code ou des assets utilisables dans différents projets. Dans l'univers .NET, il est très courant de créer des packages NuGet pour partager des bibliothèques.

Evergine est lui-même distribué au format NuGet, ce qui nous permet de fournir de nombreux comportements, composants ou services intégrés. En revanche, ce n'est pas aussi simple si vous souhaitez partager des assets comme des textures, des effets ou des matériaux depuis le dossier Content d'un projet Evergine. Pour résoudre ce problème, nous avons travaillé sur un nouveau système de packages qui vous permettra de distribuer des assets réutilisables dans de nombreux projets.

Ajouter un package existant

Lorsqu'un package est ajouté, tous ses assets, son code source et ses dépendances NuGet sont ajoutés automatiquement.

Pour l'instant, il n'est pas possible d'ajouter un package depuis l'interface d'Evergine Studio : vous devez le faire manuellement. Ouvrez simplement le fichier de votre projet Evergine (fichier .weproj) avec votre éditeur de texte favori et mettez à jour la section Packages avec les packages que vous souhaitez inclure.

Consultez simplement la liste des identifiants de packages officiels pour ajouter de nouvelles entrées.

Par exemple :

Ensuite, à l'ouverture de votre projet dans Evergine Studio, un nœud Dependencies devrait apparaître dans votre Project Explorer. Ce nœud contient tous les packages référencés. Vous pouvez développer les nœuds des packages pour en afficher le contenu.

Les assets faisant partie d'un package sont marqués en lecture seule. Si vous devez modifier l'un d'eux, c'est possible : une copie de l'asset sera créée dans votre projet. Cette copie locale remplace l'asset d'origine du package pour votre projet actuel.

Vous pouvez aussi référencer un package via un chemin local. C'est utile si vous incluez vos propres packages. Dans ce cas, la syntaxe est la suivante :

Notez que référencer un package local ne marque pas ses assets en lecture seule : si vous les modifiez, vous modifiez les fichiers de votre package local !

Créer votre propre package

Pour créer votre propre package Evergine, vous devez créer un projet distinct contenant les assets et les fichiers de code source que vous souhaitez inclure. Pour l'illustrer, nous allons créer un package fictif appelé DummyPackage avec une seule texture et un seul composant.

Après avoir créé un projet vide, nous devons créer un fichier de définition de package. Il doit avoir l'extension .wespec et vous pouvez y spécifier :

  • Owners : nom des propriétaires du package.
  • Authors : nom des auteurs du package.
  • Description : description du contenu du package.
  • Tags : liste de tags pour catégoriser le package.
  • Nugets : liste des dépendances fournies via des packages NuGet.

Le fichier de définition de package doit être placé au même niveau que le fichier de projet.

Tous les assets, comme les textures, les matériaux, les effets, etc., doivent être placés dans un dossier nommé Content, et les fichiers de code source dans un dossier nommé Source.

Vous devez également ajouter le package NuGet Evergine.Packages.Targets à votre projet pour exécuter le processus de packaging lors de la compilation du projet.

Une fois tout cela configuré, compilez simplement votre projet. Dans votre dossier bin/Debug ou bin/Release, vous trouverez le fichier wepkg généré.

Si vous souhaitez référencer ce package comme package local, n'oubliez pas d'ajouter l'entrée correspondante dans votre fichier weproj.

Pour voir un exemple fonctionnel, jetez un œil à l'un de nos dépôts de packages, comme le dépôt MixedRealityToolkit.

En conclusion, ce nouveau système de packages est né pour nous faciliter la vie, à nous, développeurs. Dans les prochaines versions, nous prévoyons d'ajouter une expérience complète dans Evergine Studio pour gérer ces packages et simplifier leur ajout et leur suppression.

Sergio Escalada
Auteur
Sergio Escalada
Plain Concepts Research