XML, Enum, Dynamique

Signaler
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
-
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
-
Bonjour,

Je travail sur un serveur de jeu, dont l'émulateur est écrit entierement en c#. L'emulateur contient une base en assembly.exe, et un dossier script qu'il compile a louverture du serveur (RunUO, pour ceux qui connaissent)

Présentement, je bosse sur un systeme de recettes. Hors, comme les recettes sont prévu pour être ajouté au fur et a mesure du temps au jeu, il serait problématique de les écrire direct dans le code et de recompiler a chaque ajout. C'est pourquoi j'ai prévu un fichier xml contenant les recettes, et une commande lancée par le client pour recharger le XML.

Hors, mon systeme est basé sur des enums. si la recette "Pizza garnie" doit exister, j'ai donc "PizzaGarnie" dans mon enum, et dans le xml un truc style:
<recette type="PizzaGarnie" name="Pizza Garnie" action=cuire>
  
  
  
     
  
</recette>

Et dans mon code, je vait avoir
public enum RecetteType
{
   ...
   PizzaGarnie,
   ...
}

Tout cela fonctionne impec.
Mon probleme vient du fait que le fait d'avoir l'enum dans le code, ça enleve tout le coté dynamique: il faut quand meme recompiler pour ajouter une recette.

Alors ma question est donc de savoir ce que vous en pensez, que pourrais-je changer pour rendre plus dynamique la chose. Y a-t-il une maniere de "remplir" une enum (perso je croit pas), ou bien vous verriez quoi d'aussi efficace

Merci beaucoup de votre aide

Eric

1 réponse

Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Salut !
Un enum c'est uniquement un nombre utilisé en remplacement du texte.
public enum Truc
{
bidule, // = 0
machin, // = 1
chose // = 2
...
}

donc dans ton xml ajoute un champs id par exemple qui remplacerai ce nombre
et arrete d'utiliser l'enum.

<recette type="PizzaGarnie" name="Pizza Garnie" id="0" action=cuire>





</recette>

Coté code, tu te contente de class/structures généralistes
exemple :
public enum recette
{
int id;
string name;
string action; //Ici je suppose qu'un enum ou quelque chose du genre existe
List lstIngredients;
....
}

public enum ingredient
{
int id; //Meme principe, d'ailleur si tout est basé la dessus, ptre qu'un héritage serait judicieux
string name;
....
}

Ensuite niveau utilisation quand tu lit ton XML :

<recette id="0" type="PizzaGarnie" name="Pizza Garnie" action=cuire>
code:
recette NouvelleRecette = new recette(0, "PizzaGarnie", "Pizza Garnie", "cuire"); // Le champs type est ptre devednu inutil maintenant, a toi de voir.
recette.lstIngredients = new List();


code:
for(int i=0; i < 3; i++)
recette.lstIngredients(new ingredient(0, "Pate");


code:
for(int i=0; i < 2; i++)
recette.lstIngredients(new ingredient(1, "Fromage");


code:
for(int i=0; i < 2; i++)
recette.lstIngredients(new ingredient(2, "Sauce");


code:
recette.lstIngredients(new ingredient(3, "Poivron");


code:
for(int i=0; i < 5; i++)
recette.lstIngredients(new ingredient(4, "Champignon");

</recette>

Et ainsi de suite.
Sinon ton histoire de création dynamique de l'enum c'est ptre possible par la reflection (c'est loin d'etre sur) et de toute facon ca servirai a rien car ton code l'utiliserai pas pour autant.

Le but pour toi est donc de faire des objet généralistes qui ont des propriétées permettant de les différencier.