From 73dd9dfd737c63c76fe3f9d3b6a88cf9e04d2525 Mon Sep 17 00:00:00 2001
From: ColinDrieu <colin.drieu@insa-rennes.fr>
Date: Tue, 3 May 2016 22:09:54 +0200
Subject: [PATCH] =?UTF-8?q?Ajout=20des=20fonctions=20recup=C3=A9rant=20les?=
 =?UTF-8?q?=20noms=20et=20le=20chemin=20des=20skins=20=C3=A0=20controlleur?=
 =?UTF-8?q?.c?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Pour Êcrire ces fonctions j'ai Êgalement modifiÊ la structure.h et gamePackage
afin de rÊcupÊrer le nombre de Classes contenues dans le fichier XML.
---
 src/controleur.c  | 53 ++++++++++++++++++++++++++++++++++++++++++++++-
 src/controleur.h  |  5 +++++
 src/gamePackage.c | 47 +++++++++++++++++++++++++++++++++++++++++
 src/gamePackage.h |  5 +++++
 src/structures.h  |  4 ++++
 5 files changed, 113 insertions(+), 1 deletion(-)

diff --git a/src/controleur.c b/src/controleur.c
index 65ec869..2dfdd48 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -13,6 +13,7 @@
 #include "personnage.h"
 #include "classe.h"
 #include "gamePackage.h"
+#include "roxml.h"
 
 Partie * partieGlobale;
 Game_Package packGlobal;
@@ -27,7 +28,7 @@ void initJeu(){
 }
 
 /*!
- * \fn void ajouterUnJoueur(char * nomDuJoueur, Et)
+ * \fn void ajouterUnJoueur(char * nomDuJoueur, EtatsJeu * etat)
  * \brief Fonction ajoutant un Joueur ā la Partie et faisant passer la partie ā l'état suivant.
  *        Si le joueur n'a pas correctement été ajouté, l'état reste le męme.
  *
@@ -49,6 +50,56 @@ void initJeu(){
     }
  }
 
+ /*!
+ * \fn char ** obtenirNomsClasses()
+ * \brief Fonction renvoyant un tableau de chaine de caractčres contenant les noms des Classes.
+ *        L'ordre et l'index des noms dans le tableau correspond ā l'ordre dans lequel ils sont définis
+ *        dans le fichier XML.
+ *
+ * \return un tableau de chaine de charactčres (char**).
+ */
+ char ** obtenirNomsClasses(){
+    int i;
+    //Allocation du tableau contenant les chaines de charactčres
+    char ** tabNomClasses = malloc((getNbClasses(packGlobal))*sizeof(char *));
+    for(i=0;i<getNbClasses(packGlobal);i++){
+        tabNomClasses[i]= malloc(TAILLE_NOMS*sizeof(char));
+    }
+
+    //Copie des noms de classes dans le tableau
+    for(i=0;i<getNbClasses(packGlobal);i++){
+        strncpy(tabNomClasses[i],packGlobal.Classes_Package[i].nom, TAILLE_NOMS);
+    }
+    return tabNomClasses;
+ }
+
+  /*!
+ * \fn char ** obtenirSkinsClasses()
+ * \brief Fonction renvoyant un tableau de chaine de caractčres contenant le chemin vers les Skins des Classes.
+ *        L'ordre et l'index des noms dans le tableau correspond ā l'ordre dans lequel ils sont définis
+ *        dans le fichier XML.
+ *        Ici le chemin du Skin renvoyé est celui du "default".
+ *
+ * \return un tableau de chaine de charactčres (char**).
+ */
+ char ** obtenirSkinsClasses(){
+    int i;
+    //Allocation du tableau contenant les chaines de charactčres
+    char ** tabSkinsClasses = malloc((getNbClasses(packGlobal))*sizeof(char *));
+    for(i=0;i<getNbClasses(packGlobal);i++){
+        tabSkinsClasses[i]= malloc(TAILLE_CHEMIN*sizeof(char));
+    }
+        //Copie des chemin des skins dans le tableau
+    for(i=0;i<getNbClasses(packGlobal);i++){
+        strncpy(tabSkinsClasses[i],packGlobal.Classes_Package[i].skins.charac_default, TAILLE_CHEMIN);
+    }
+    return tabSkinsClasses;
+ }
+
+
+
+
+
 
 
 
diff --git a/src/controleur.h b/src/controleur.h
index c14fa45..8701d71 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -10,5 +10,10 @@
 
 void initJeu();
 
+void ajouterUnJoueur(char * nomDuJoueur, EtatsJeu * etat);
+
+char ** obtenirNomsClasses();
+char ** obtenirSkinsClasses();
+
 #endif // CONTROLEUR_H
 
diff --git a/src/gamePackage.c b/src/gamePackage.c
index 7fdfcbd..1605f3e 100644
--- a/src/gamePackage.c
+++ b/src/gamePackage.c
@@ -7,6 +7,9 @@
 #include "roxml.h"
 #include "Interface.h"
 #include "gamePackage.h"
+#include "classe.h"
+#include "terrain.h"
+#include "carte.h"
 
 /*!
  * \fn Game_Package Construire_Package()
@@ -19,9 +22,14 @@ Game_Package Construire_Package()
     Game_Package Pack;
 
     Classe* Classes_Pack = Librairie_Classes("../resources/Classes.xml");
+    Pack.nbClasses = getNbElements("../resources/Classes.xml");
+
     Terrain* Terrains_Pack = Librairie_Terrains("../resources/Terrains.xml");
+
     Skins_GUI* GUI_Pack = Get_Skins_GUI("../resources/GUI.xml");
+
     Carte_A* Map_Pack = ExtraireCartesXML("../resources/Maps.xml");
+    Pack.nbCartes = getNbElements("../resources/Maps.xml");
 
     Pack.Classes_Package = Classes_Pack;
     Pack.Terrains_Package = Terrains_Pack;
@@ -31,3 +39,42 @@ Game_Package Construire_Package()
     return Pack;
 }
 
+/*!
+ * \fn int getNbElements(char * file)
+ * \brief Fonction determinant le nombre de d'éléments dans un fichier XML
+ *
+ * \param le fichier ā tester.
+ * \return le nombre d'élements dans le fichier.
+ */
+int getNbElements(char * file){
+
+    node_t *rootXML, *Element;
+
+    rootXML = roxml_load_doc(file);            /* Ouvre le doc XML et créé le noeud de base */
+    Element = roxml_get_chld(rootXML, NULL, 0);    /* Descend d'un niveau dans l'arborescence */
+
+    return roxml_get_chld_nb(Element);    /* Récupčre le nombre de classes entrées dans le fichier XML */
+}
+
+/*!
+ * \fn int getNbClasses(Game_Package pack)
+ * \brief Fonction retournant le nombre de classes d'un Game_Package
+ *
+ * \param le Game_Package ā tester.
+ * \return le nombre de classes du Game_Package.
+ */
+int getNbClasses(Game_Package pack){
+    return pack.nbClasses;
+}
+
+/*!
+ * \fn int getNbClasses(Game_Package pack)
+ * \brief Fonction retournant le nombre de classes d'un Game_Package
+ *
+ * \param le Game_Package ā tester.
+ * \return le nombre de classes du Game_Package.
+ */
+int getNbCartes(Game_Package pack){
+    return pack.nbCartes;
+}
+
diff --git a/src/gamePackage.h b/src/gamePackage.h
index 0fa8142..2017b3a 100644
--- a/src/gamePackage.h
+++ b/src/gamePackage.h
@@ -8,6 +8,11 @@
 
 Game_Package Construire_Package();
 
+int getNbElements(char * file);
+
+int getNbClasses(Game_Package pack);
+int getNbCartes(Game_Package pack);
+
 #endif // GAME_PACKAGE_INCLUDED
 
 
diff --git a/src/structures.h b/src/structures.h
index 28a8f1e..c27546c 100644
--- a/src/structures.h
+++ b/src/structures.h
@@ -32,6 +32,8 @@
 #define LARG_MAX_CARTE 16
 /*! \def LONG_MAX_CARTE */
 #define HAUT_MAX_CARTE 10
+/*! \def TAILLE_CHEMIN */
+#define TAILLE_CHEMIN 50
 
 /*! \enum boolean
  * \brief Definition du type Boolean.
@@ -228,6 +230,8 @@ typedef struct Carte_A{
  * sizeof(Classe) =
  */
 typedef struct Game_Package{
+    int nbCartes;
+    int nbClasses;
     Classe* Classes_Package;
     Terrain* Terrains_Package;
     Skins_GUI* GUI_Package;
-- 
GitLab