Le moteur Yna a bientôt un an d’existence en tant que projet open source sur Codeplex et je suis assez satisfait des retours que j’ai eu à son sujet. Codeplex est une belle plateforme de pour mettre un projet open source mais il y a des limites que je commence à atteindre au niveau du suivi et de la gestion du code source. Par exemple avec la version de git proposée, on ne peux pas enregistrer de clé ssh, il faut à chaque fois entrer le couple login/mot de passe et l’utilisation des submodule est compliqué voir impossible.. De plus en tant qu’administrateur du projet vous n’êtes pas notifié automatiquement en cas de nouveau message sur la plateforme de discussion, il faut s’abonner à chaque message.. Ainsi je n’ai pas pu répondre à temps à certains messages. Tout ça est presque terminé puisque j’ai décidé de migrer le projet sur github, avec mes autres projets open source. Il y a donc désormais trois dépôts :
- Yna Engine
- Yna Engine Samples (exemples)
- Yna Engine ThirdParty (dépendances)
Pour récupérer les sources c’est très facile il vous suffit d’installer git et de faire :
git clone git@github.com:demonixis/YnaEngine.git # Activation des submodules cd YnaEngine git submodule init # Si vous voulez les exemples git submodule update Samples #Si vous voulez les dépendances git submodule update ThirdParty
Ce qui est bien avec ce nouveau système, c’est que vous n’êtes pas obligé de récupérer les sources, les exemples et les dépendances, mais uniquement ce dont vous avez besoin. Bon maintenant que ce point est clarifié, parlons un peu d’Yna.
La fin d’OpenTK au profit de SDL2
Si il y a bien une chose qui peut me casser les pieds, c’est bien la différence énorme qu’il y a dans la gestion du fenêtrage entre les différentes plateformes et en particulier sur Linux. MonoGame utilise actuellement la bibliothèque OpenTK pour gérer le fenêtrage, le dessin 3D via OpenGL et la gestion de l’audio via OpenAL. OpenTK est un beau projet mais il n’est hélas plus assez supporté et contient trop de bugs qui freinent certaines plateformes comme Linux. Récemment un développeur a décidé de réaliser un binding SDL2 multi-plateforme pour .Net et de supprimer OpenTK de MonoGame en le remplacent par son SDL2#. C’est une réussite totale ! Je vous encourage vivement à consulter sa branche sur github. Un tas de jeux l’utilisent déjà ! Le plus fantastique c’est que ça marche vraiment bien et qu’en plus.. avec une seule solution on peut compiler sur Windows, Linux et Mac OSX 😀 Donc désormais nous avons un seul projet qui gère 3 systèmes, à savoir Yna.SDL2.csproj.
Pour utiliser cette version il faut bien évidement avoir récupérer les fichiers natifs de SDL2 et SDL2_mixer (bientôt ça ne sera plus utile) et les copier à côté de votre exécutable. Il faut aussi bien faire attention qu’à côté de votre exécutable il y ai les fichiers SDL2#.config et Theora#.config.
Parlons du futur
Ne mâchons pas nos mots, Yna a prit de la taille depuis un an, c’est assez dingue de constater tous les ajouts et les évolutions d’architecture qu’il y a pu avoir. L’année dernière Yna était pas mal pour faire des jeux en 2D rapidement, mais maintenant on peut faire de la 2D optimisée, de la 3D, utiliser une GUI et même brancher un moteur physique dessus 🙂
De part cette taille qu’a pu prendre le projet (c’est tout de même très raisonnable hein), j’ai décidé de découper certains modules du code et d’en faire des bibliothèques externes comme c’est le cas par exemple avec XNA qui propose une dll pour chaque gros modules. L’idée va donc être de découper Yna correctement pour avoir des modules de plus petites tailles qui seront facilement isolables et maintenables.
J’ai déjà commencé ce travail et pour l’instant, ce sont les modules Tilemap, SpeechSynthesis et Wiimote qui ont leurs propre projet. Par la suite je pense découper le projet comme suis :
Nom de l’assembly | Déscription |
---|---|
Yna.Engine.dll | cœur du moteur avec la partie 2D et les composants de base comme le gestionnaire d’état, les entités, etc… |
Yna.Engine.GUI.dll | Gestion de la GUI |
Yna.Engine.Storage.dll | Gestion du stockage multi-plateforme |
Yna.Engine.Graphics3D.dll | Moteur 3D |
Yna.Engine.Script.dll | Scripting sur les Sprites |
Yna.Engine.Wiimote.dll | Gestion de la Wiimote* |
Yna.Engine.Kinect.dll | Gestion du capteur Kinect* |
Yna.Engine.SpeechSynthesis.dll | Gestion de la synthèse vocale* |
* Uniquement sur Windows Desktop
De notre côté c’est très pratique car nous travaillons avec plusieurs fichiers de projets et plusieurs solutions. Ces projets ne comportent pas tous les mêmes fichiers, par exemple pour le stockage sur Windows Phone 7, il y a une classe spéciale qui gère l’enregistrement des données avec des méthodes spécifiques à Windows Phone 7 alors que pour la version Windows classique on utilise une autre façon de faire. Ainsi quand on fait une grosse mise à jour sur un projet il faut l’impacter sur tous les autres projets et c’est une vraie douleur. Du côté développeur ça sera encore mieux car uniquement les parties nécessaires du moteur seront utilisées.
J’avais déjà annoncé que je ne supporterais bientôt plus XNA sur PC (uniquement sur Windows Phone tant que MonoGame n’est pas pleinement utilisable sur cette plateforme) et c’est Alex qui a continué à maintenir le port. Hélas au vue des évolutions et des limitations de XNA sur PC nous allons prochainement supprimer complétement son support. En réalité MonoGame ajoute par défaut les restrictions de XNA mais elles sont tout de même moins fortes. Microsoft a tué XNA et ce n’est peut être pas forcement une si mauvaise chose, ce que nous voulons ce sont des outils, un Framework, qui répondent à nos besoins et dans cette optique XNA ne remplie pas les besoins.
Les outils
Nous en avons déjà parlé plusieurs fois avec Alex et c’est quelque chose qui me tiens à coeur : La création d’outils pour travailler à un autre niveau avec Yna. Ce que j’aimerais faire c’est un éditeur 2D et 3D permettant de créer des scènes et les importer dans un code en une ligne. Ce n’est pas compliqué à faire mais il faut du temps et il faut penser le système correctement.
Un autre « truc » un peu moins utile mais terriblement pratique lorsque l’on maquette un projet ou que l’on participe à une jam : La lanceur qui va permettre de régler les paramètres graphiques, gamplay, audio, etc… Comme c’est le cas avec Unity par exemple.
Où sont les autres plateformes ?
Comme je l’ai indiqué par le passé, mon objectif est de réaliser des ports de qualité sur plusieurs plateformes et en un an nous supportons déjà Windows, Linux, Mac (pas encore officiellement), Windows Phone 7 & 8 ainsi que Windows 8. On me demande souvent via twitter ou sur d’autres support si je vais sortir une version Xbox 360, Android, iOS, PS Vita et la réponse est non dans l’immédiat.. Pourquoi ça ? Le support de la Xbox 360 n’est plus intéressent pour moi car les prochaines générations de consoles arrivent bientôt et Microsoft tente étouffer un maximum la communauté XBLIG, il n’y a qu’à voir les outils de développement qui n’ont pas évolués depuis 2010, la suppression du support de XNA (faites du JavaScript ou si vous êtes grands trouvez vous un éditeur et faites du C++) ou les communications douteuses que l’on peut lire un peu partout. Un port iOS ne m’intéresse pas mais je ne suis pas contre, si un développeur iOS veux faire et maintenir un port iOS alors il sera accueilli à bars ouvert, mais vue la politique d’Apple ce n’est clairement pas dans mes préoccupations.
Pour Android et PS Vita c’est autre chose.. J’aimerais vraiment amener Yna sur Android mais il faut payer une licence de développeur en plus à la société Xamarin afin de pouvoir utiliser les outils de développement qui permettent de faire du C# sur Android. Le prix de cet outils est de 299 dollars par an, avec les temps actuels je ne veux pas investir dans cette solution pour le moment. Pour la PS Vita la licence est devenue gratuite mais là aussi il faut acheter la console et une carte mémoire, tout cela a un prix et comme dit plus haut je ne veux pas investir de grosses sommes pour le moment pour réaliser des ports. J’ai cependant pensé à faire une levée de fonds sur IndieGogo afin de payer une licence développeur Xamarin, me permettant de porter Yna sur Android une bonne fois pour toute, et d’acheter une PS Vita pour lui donner le port qu’elle mérite. Hélas il faut vraiment être faire un maximum de communication, promettre monde et merveille pour que les internautes puissent contribuer un peu et je n’ai pas encore assez de notoriété pour ça.
Pour conclure
Je suis toujours très enthousiaste sur ce projet et ça se voit car il est très actif. J’ai eu la chance de pouvoir collaborer avec quelques personnes qui ont permis d’améliorer grandement le moteur, je pense en particulier à Alex qui a largement contribué au moteur dans divers modules, mais aussi plus récemment, à Laurent qui nous rapporté un tas de bugs lors de son utilisation de Yna, cela nous a permis de gagner en qualité sur la partie 2D du moteur. Vraiment, merci à vous 🙂 . Il y a encore du travail car je n’ai pas encore commencé de travailler sur l’éditeur de niveau, ni sur le lanceur par défaut mais ça viendra. Ce projet demande du temps, beaucoup de temps et je ne veux pas mal faire les choses en allant plus vite que la musique. Si cela vous intéresse n’hésitez pas à forker le projet et à faire des pull request ou plus simplement à m’envoyer un mail, un tweet ou un talk sur Google+, je vous répondrais avec plaisir !