diff --git a/src/controleur.c b/src/controleur.c index 65ec869ec50f856f0ce5a1d15847cebb6de988a5..2dfdd4840f55b7b14cddb64f35858c2f3a00299e 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 c14fa45f19ab68bff8db563297a9b1ab3c1e8359..8701d7139e7af0a3b1d8385a1ea8971380192bfb 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 7fdfcbd40b1c304e4781761e223eb797b70ae3d0..1605f3ecc3b9e760acc4ce5da193241e552d13c5 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 0fa8142152964be69ab688609928e3b76693caf9..2017b3a11cb9f9a92542aba97533c6d188087ce4 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 28a8f1e331616b71dd7467e6dcedc36ddb906ad5..c27546c4a7280c2bb5c8568876bd53d17764833a 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;