Xna + xsd + php + xml

(Oui, j’aime les acronymes).

Hello all,

Lors de la dernière ludum dare qui s’est déroulé il y a 10 jours, je me suis retrouvé face à une problématique, qui est pour l’instant gérée manuellement, mais je pense qu’il y a moyen de l’automatiser.

J’explique la problématique: XNA/Monogame est capable d’importer et de mapper des classes de données à partir d’un flux XML. Généralement, on se sert de cette fonctionnalité pour définir des paramètres (par exemple, on fait une classe Warrior, et on défini des champs Strength, Defense, Health). Le XML contiendra des valeurs pour ces 3 champs et XNA sera capable de l’importer dans une classe Warrior.

Jusque là, tout va bien. J’ai appliqué ce principe pour la création de niveau, via un éditeur de niveau (en HTML/PHP/JS) qui me permet de drag & drop des items et de peindre des zones avec des textures, et de sortir le XML correspondant pour inclure directement dans mon jeu.

Ma problématique est que la déclaration des items pour l’éditeur de niveau se fait à la main (aka, mon éditeur ne sait pas que la classe Warrior existe, donc je dois lui dire manuellement), et j’ai aucune synchronisation possible entre le type de donnée en C# et la liste des items disponibles dans mon éditeur.

Je me suis donc demandé s’il existait une possible synchronisation entre les types de données en C# sous XNA et mon éditeur de niveau. Une recherche rapide sur les internetz m’a donné un lien vers svcutil, qui, avec le paramètre /dataContractOnly, permet de sortir un XSD (qui est un fichier XML) décrivant à priori les types de données. Mais après une lecture rapide, ce fichier semble être trop complexe à parser manuellement.

J’ai donc regardé si PHP disposait de fonctions pour parser ces XSD, et cela existe, mais à priori, il n’existe aucune fonction pour décrire les objets, juste pour les créer.

Ma question est donc: existe il un moyen pour décrire ces objets en PHP (ou en JS, l’utilisation du PHP restant très minime dans l’éditeur de niveau)?

Question subsidiaire: Existe il des annotations en C# décrivant plus en détail les valeurs possibles pour chaque champ? Pour reprendre l’exemple de mon Warrior, je pourrai décréter que Strength doit être compris en 0 et 20 inclus. Est ce que ces annotations sont exportables vers le XSD?

Je suis pas sur d’avoir bien pigè ta problématique. Soit :

  1. Tu as des classes C#
  2. Tu as des fichiers XML te permettant d’instancier ces classes et les initialiser à partir des données contenu dans ces même fichiers
  3. Tu aimerais pouvoir générer le XSD décrivant le schema XML à partir des classes C#.

ou bien :

  1. Tu as un fichier XML (qui se trouve être un fichier XSD, mais c’est accessoire) et tu aimerais pouvoir extraire les informations de ce fichier sous forme de modèle objet exploitable en JS ou PHP ?

Si ce n’est rien de ça, pourrais-tu poster des exemples de fichier dont tu disposes, et ce que tu aimerais obtenir en sortie ?

Première option. J’aimerai pouvoir générer le XSD décrivant le schéma XML à partir des classes C#.

svcutil c’est fait pour generer des contracts de webservices. Si ca t’arrive pas a t’en servir, arretes la prog tout de suite :x
Sinon, load du mono en js ou converti ton assembly en js (ca se fait) et hop, tu sauras quel type sont dispos et zou.
Pourquoi faire simple quand tu peux faire compliqué :slight_smile:

Excuse moi de ne pas avoir la science infuse ;).

And @AnA-l win the game. Je ne savais pas que c’était possible, et pourtant j’aurai du m’en douter…

Alors, c’est un equivalent à XJC (outil générant un XSD a partir de classes Java annotées, ou l’inverse, au choix) qu’il te faut. J’ai fait une rapide recherche , y’a pas mal de réponse sur StackOverflow.

Ou sinon, la solution de Ana-I à l’air pas mal. faut juste voir les performances.

RTFM en fait : ServiceModel Metadata Utility Tool (Svcutil.exe) - WCF | Microsoft Learn
Et sinon, l’un ou l’autre devrait faire le taff, mais je pige pas l’interet de l’editeur en php et cie si t’as le moteur en C#.

Peut etre que c’etait plus rapide a faire sur cette plateforme?

Genre y’a NW.js (node-webkit) qui permet de faire des app standalones a partir de tech webs.
Tiens d’ailleurs, prenez la petite heure pour mater ca c’est plutot cool http://gdcvault.com/play/1023377/Tech

Ouais, mais au final c’est pas consistant et il rencontre des problemes de merde :frowning: