Yna Engine est sur Github !

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 :

SplashScreen2
Nous sommes sur github

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.

Lanceur du jeu A.M. Lost
Lanceur du jeu A.M. Lost

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 !