/BBTA/BBTA/Classe/Option/BBTA_ConstructeurOption.cs

https://bitbucket.org/kraig2/bbta · C# · 328 lines · 236 code · 37 blank · 55 comment · 33 complexity · feebee364b9701f28c20efe77d60ab5b MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml;
  6. using System.Net;
  7. using System.ComponentModel;
  8. using System.IO;
  9. using System.Xml.Serialization;
  10. using System.Runtime.Serialization;
  11. using Microsoft.Xna.Framework.Input;
  12. namespace BBTA.Option
  13. {
  14. /// <summary>
  15. /// La classe BBTA_ConstructeurOption gère la génération des fichiers XML pour enregistrer les paramètres de jeu de l'utilisateur, pour charger
  16. /// les fichiers de configuration déjà présent, détecter les erreurs et effectuer les remplacements néccéssaires.
  17. /// </summary>
  18. public class BBTA_ConstructeurOption
  19. {
  20. #region Attribut
  21. private Option optionUtilisateur;
  22. private Option optionDefaut;
  23. private Option optionActive;
  24. private bool mauvaisUtilisateur;
  25. private bool mauvaisDefaut;
  26. private bool presentUtilisateur;
  27. private bool presentDefaut;
  28. private XmlTextReader lecteur = null;
  29. private XmlTextWriter ecriveur = null;
  30. private XmlSerializer serializer = null;
  31. private bool chargementReussis;
  32. #endregion
  33. #region Option Usine
  34. private Option optionUsine;
  35. private const string nomDefaut = "defautConfig.xml";
  36. private const string nomUtilisateur = "utilisateurConfig.xml";
  37. private const int VOLUME_MUSIQUE_USINE = 100;
  38. private const int VOLUME_EFFET_SONORE_USINE = 100;
  39. private const Keys TOUCHE_GAUCHE_USINE = Keys.A;
  40. private const Keys TOUCHE_DROIT_USINE = Keys.D;
  41. private const Keys TOUCHE_SAUT_USINE = Keys.Space;
  42. private const Keys TOUCHE_TIR_USINE = Keys.Space;
  43. private const Keys TOUCHE_PAUSE_USINE = Keys.P;
  44. #endregion
  45. public bool ChargementReussis { get { return chargementReussis; } }
  46. public Option OptionActive { get { return optionActive; } }
  47. public Option OptionDefaut { get { return optionDefaut; } }
  48. /// <summary>
  49. /// Constructeur de base de BBTA_ConstructeurOption.
  50. /// </summary>
  51. public BBTA_ConstructeurOption()
  52. {
  53. optionUtilisateur = new Option();
  54. optionDefaut = new Option();
  55. optionActive = new Option();
  56. optionUsine = new Option();
  57. serializer = new XmlSerializer(typeof(Option));
  58. //On charge l'objet Option d'usine qui contient les paramètres d'usine du jeu.
  59. OptionUsine();
  60. }
  61. /// <summary>
  62. /// Charge les paramètres d'usine dans un objet Option.
  63. /// Les paramètres d'usine sont utilisés lors de la réparation et de la création de fichiers XML des paramètres de jeu.
  64. /// </summary>
  65. private void OptionUsine()
  66. {
  67. this.optionUsine.InformationSonore.Musique = VOLUME_MUSIQUE_USINE;
  68. this.optionUsine.InformationSonore.EffetSonore = VOLUME_EFFET_SONORE_USINE;
  69. this.optionUsine.InformationTouche.Gauche = TOUCHE_GAUCHE_USINE;
  70. this.optionUsine.InformationTouche.Droite = TOUCHE_DROIT_USINE;
  71. this.optionUsine.InformationTouche.Saut = TOUCHE_SAUT_USINE;
  72. this.optionUsine.InformationTouche.Tir = TOUCHE_TIR_USINE;
  73. this.optionUsine.InformationTouche.Pause = TOUCHE_PAUSE_USINE;
  74. }
  75. /// <summary>
  76. /// ChercheFichierConfig recherche les fichiers de configuration par défaut et de l'utilisateur
  77. /// d'après le nom des fichiers. Un attribut bool signale si oui ou non les fichiers sont présents.
  78. /// </summary>
  79. private void ChercheFichierConfig()
  80. {
  81. List<string> fichiers = new List<string>();
  82. foreach (var path in Directory.GetFiles(Directory.GetCurrentDirectory()))
  83. {
  84. fichiers.Add(System.IO.Path.GetFileName(path));
  85. }
  86. foreach (string fichier in fichiers)
  87. {
  88. if (fichier == nomDefaut)
  89. {
  90. presentDefaut = true;
  91. }
  92. else if (fichier == nomUtilisateur)
  93. {
  94. presentUtilisateur = true;
  95. }
  96. }
  97. }
  98. /// <summary>
  99. /// TesterFichier teste les fichiers de configuration s'ils ont été signalés comme étant présent.
  100. /// Si la lecture provoque une erreur le fichier est marqué.
  101. /// </summary>
  102. private void TesterFichier()
  103. {
  104. if (presentDefaut)
  105. {
  106. LectureOption(nomDefaut, ref optionDefaut);
  107. if (chargementReussis == false)
  108. {
  109. mauvaisDefaut = true;
  110. }
  111. }
  112. else if (!presentDefaut)
  113. {
  114. mauvaisDefaut = true;
  115. }
  116. if (presentUtilisateur)
  117. {
  118. LectureOption(nomUtilisateur, ref optionUtilisateur);
  119. if (chargementReussis == false)
  120. {
  121. mauvaisUtilisateur = true;
  122. }
  123. }
  124. else if (!presentUtilisateur)
  125. {
  126. mauvaisUtilisateur = true;
  127. }
  128. }
  129. /// <summary>
  130. /// Initialise le chargement et le teste des fichiers de configuration.
  131. /// Vérifie si les fichiers ont été marqués comme étant défectueux.
  132. /// Remplace les mauvais fichiers.
  133. /// </summary>
  134. public void Initialisation()
  135. {
  136. ChercheFichierConfig();
  137. TesterFichier();
  138. Console.WriteLine("Initialisation des fichiers de configuration");
  139. Console.WriteLine("Fichier utilisateur trouvé ? : " + presentUtilisateur);
  140. Console.WriteLine("Fichier defaut trouvé ? : " + presentDefaut);
  141. Console.WriteLine("Fichier utilisateur mal chargé ? : " + mauvaisUtilisateur);
  142. Console.WriteLine("Fichier defaut mal chargé ? : " + mauvaisDefaut);
  143. if (mauvaisUtilisateur || mauvaisDefaut)
  144. {
  145. Reparation();
  146. Console.WriteLine("RÉPARATION");
  147. Console.WriteLine("Fichier utilisateur trouvé ?: " + presentUtilisateur);
  148. Console.WriteLine("Fichier defaut trouvé ? : " + presentDefaut);
  149. Console.WriteLine("Fichier utilisateur mal chargé ? : " + mauvaisUtilisateur);
  150. Console.WriteLine("Fichier defaut mal chargé ? : " + mauvaisDefaut);
  151. }
  152. Console.WriteLine("Fin Initialisation");
  153. //Si, malgré la réparation, un des fichiers est défectueux, alors on charge l'objet Option avec les paramètres d'usine.
  154. if (mauvaisUtilisateur || mauvaisDefaut)
  155. {
  156. Console.WriteLine("Incapable de réparer");
  157. RetourUsine(ref optionActive);
  158. }
  159. else
  160. {
  161. //Chargement du fichier de configuration de l'utilisateur.
  162. RetourUtilisateur();
  163. }
  164. }
  165. /// <summary>
  166. /// Reparation remplace l'objet Option et le fichier XML approprié par les paramètres d'usine.
  167. /// Vérifie que la réparation c'est bien effectuée.
  168. /// </summary>
  169. private void Reparation()
  170. {
  171. if (mauvaisDefaut)
  172. {
  173. optionDefaut = new Option();
  174. EcritureOption(nomDefaut, optionUsine);
  175. mauvaisDefaut = false;
  176. presentDefaut = false;
  177. ChercheFichierConfig();
  178. TesterFichier();
  179. }
  180. if (mauvaisUtilisateur)
  181. {
  182. optionUtilisateur = new Option();
  183. EcritureOption(nomUtilisateur, optionDefaut);
  184. mauvaisUtilisateur = false;
  185. presentUtilisateur = false;
  186. ChercheFichierConfig();
  187. TesterFichier();
  188. }
  189. }
  190. /// <summary>
  191. /// Lecture d'un fichier XML.
  192. /// </summary>
  193. /// <param name="FichierEntre">Nom du fichier.</param>
  194. /// <param name="option">Objet Option où les paramètres seront enregistrés.</param>
  195. private void LectureOption(string FichierEntre, ref Option option)
  196. {
  197. try
  198. {
  199. lecteur = new XmlTextReader(FichierEntre);
  200. option = (Option)serializer.Deserialize(lecteur);
  201. chargementReussis = true;
  202. }
  203. catch (Exception ex)
  204. {
  205. option = null;
  206. chargementReussis = false;
  207. Console.WriteLine(ex.Message);
  208. return;
  209. }
  210. finally
  211. {
  212. if (lecteur != null)
  213. {
  214. lecteur.Close();
  215. }
  216. }
  217. }
  218. /// <summary>
  219. /// Écriture d'un fichier XML à partir d'un objet Option.
  220. /// </summary>
  221. /// <param name="FichierSortie">Nom du fichier de sortie.</param>
  222. /// <param name="option">Objet Option qui sera écrit transformé en fichier XML.</param>
  223. private void EcritureOption(string FichierSortie, Option option)
  224. {
  225. try
  226. {
  227. ecriveur = new XmlTextWriter(FichierSortie, null);
  228. ecriveur.WriteStartDocument();
  229. serializer.Serialize(ecriveur, option);
  230. ecriveur.WriteEndDocument();
  231. }
  232. catch (Exception ex)
  233. {
  234. Console.WriteLine(ex.Message);
  235. return;
  236. }
  237. finally
  238. {
  239. if (ecriveur != null)
  240. {
  241. ecriveur.Close();
  242. }
  243. }
  244. }
  245. /// <summary>
  246. /// Enregistre un nouveau fichier de configuration de l'utilisateur à partir d'un objet Option et lance son chargement.
  247. /// </summary>
  248. public void EnregistrementUtilisateur(ref Option option)
  249. {
  250. EcritureOption(nomUtilisateur, option);
  251. Initialisation();
  252. }
  253. /// <summary>
  254. /// Change les options utilisés vers les paramètres par défaut.
  255. /// </summary>
  256. public void RetourDefaut()
  257. {
  258. if (mauvaisDefaut == false && presentDefaut == true)
  259. {
  260. optionActive = optionDefaut;
  261. }
  262. else
  263. {
  264. //Les paramètres par défaut sont défectueux, on utilise les paramètres d'usine.
  265. RetourUsine(ref optionDefaut);
  266. }
  267. }
  268. /// <summary>
  269. /// Change les options utilisés vers les paramètres de l'utilisateur.
  270. /// </summary>
  271. private void RetourUtilisateur()
  272. {
  273. if (mauvaisUtilisateur == false && presentUtilisateur == true)
  274. {
  275. optionActive = optionUtilisateur;
  276. }
  277. else
  278. {
  279. //Les paramètres de l'utilisateur sont défectueux, on utilise les paramètres d'usine.
  280. RetourUsine(ref optionActive);
  281. }
  282. }
  283. /// <summary>
  284. /// Change les options utilisés vers les paramètres de d'usine.
  285. /// </summary>
  286. private void RetourUsine(ref Option option)
  287. {
  288. option = optionUsine;
  289. }
  290. }
  291. }