/RacingGameWindows1/RacingGame/RacingGame/Helpers/FileHelper.cs

https://bitbucket.org/ddreaper/racing-game-kit · C# · 259 lines · 177 code · 23 blank · 59 comment · 21 complexity · 6d4c08c33c1f90493848be459ae159ad MD5 · raw file

  1. #region File Description
  2. //-----------------------------------------------------------------------------
  3. // FileHelper.cs
  4. //
  5. // Microsoft XNA Community Game Platform
  6. // Copyright (C) Microsoft Corporation. All rights reserved.
  7. //-----------------------------------------------------------------------------
  8. #endregion
  9. #region Using directives
  10. using Microsoft.Xna.Framework;
  11. using Microsoft.Xna.Framework.Storage;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.IO;
  15. using System.Text;
  16. using System.Threading;
  17. using Microsoft.Xna.Framework.GamerServices;
  18. using RacingGame.Graphics;
  19. using Microsoft.Xna.Framework.Graphics;
  20. #endregion
  21. namespace RacingGame.Helpers
  22. {
  23. /// <summary>
  24. /// File helper class to get text lines, number of text lines, etc.
  25. /// Update: Now also supports the XNA Storage classes :)
  26. /// </summary>
  27. public static class FileHelper
  28. {
  29. #region LoadGameContentFile
  30. /// <summary>
  31. /// Load game content file, returns null if file was not found.
  32. /// </summary>
  33. /// <param name="relativeFilename">Relative filename</param>
  34. /// <returns>File stream</returns>
  35. public static Stream LoadGameContentFile(string relativeFilename)
  36. {
  37. return TitleContainer.OpenStream(relativeFilename);
  38. }
  39. #endregion
  40. #region StorageDevice
  41. public static ManualResetEvent StorageContainerMRE = new ManualResetEvent(true);
  42. /// <summary>
  43. /// XNA user device, asks for the saving location on the Xbox360,
  44. /// theirfore remember this device for the time we run the game.
  45. /// </summary>
  46. static StorageDevice xnaUserDevice = null;
  47. /// <summary>
  48. /// Xna user device
  49. /// </summary>
  50. /// <returns>Storage device</returns>
  51. public static StorageDevice XnaUserDevice
  52. {
  53. get
  54. {
  55. if ((xnaUserDevice != null) && !xnaUserDevice.IsConnected)
  56. {
  57. xnaUserDevice = null;
  58. }
  59. // Create if not created yet.
  60. if (xnaUserDevice == null)
  61. {
  62. if (Guide.IsVisible)
  63. {
  64. return null;
  65. }
  66. IAsyncResult async = StorageDevice.BeginShowSelector(PlayerIndex.One, null, null);
  67. async.AsyncWaitHandle.WaitOne();
  68. xnaUserDevice = StorageDevice.EndShowSelector(async);
  69. #if XBOX360
  70. if (!Guide.IsVisible)
  71. {
  72. BaseGame.GamerServicesComponent.Update(new GameTime());
  73. }
  74. if (Guide.IsVisible)
  75. {
  76. Thread.Sleep(10);
  77. BaseGame.GamerServicesComponent.Update(new GameTime());
  78. BaseGame.graphicsManager.GraphicsDevice.Clear(Color.Black);
  79. BaseGame.graphicsManager.GraphicsDevice.Present();
  80. }
  81. #endif
  82. }
  83. return xnaUserDevice;
  84. }
  85. }
  86. #endregion
  87. #region Get text lines
  88. /// <summary>
  89. /// Returns the number of text lines we got in a file.
  90. /// </summary>
  91. static public string[] GetLines(string filename)
  92. {
  93. try
  94. {
  95. StreamReader reader = new StreamReader(
  96. new FileStream(filename, FileMode.Open, FileAccess.Read),
  97. System.Text.Encoding.UTF8);
  98. // Generic version
  99. List<string> lines = new List<string>();
  100. do
  101. {
  102. lines.Add(reader.ReadLine());
  103. } while (reader.Peek() > -1);
  104. reader.Close();
  105. return lines.ToArray();
  106. }
  107. catch (FileNotFoundException)
  108. {
  109. // Failed to read, just return null!
  110. return null;
  111. }
  112. catch (DirectoryNotFoundException)
  113. {
  114. return null;
  115. }
  116. catch (IOException)
  117. {
  118. return null;
  119. }
  120. }
  121. #endregion
  122. #region Write Helpers
  123. /// <summary>
  124. /// Write vector3 to stream
  125. /// </summary>
  126. /// <param name="writer">Writer</param>
  127. /// <param name="vec">Vector3</param>
  128. public static void WriteVector3(BinaryWriter writer, Vector3 vec)
  129. {
  130. if (writer == null)
  131. throw new ArgumentNullException("writer");
  132. writer.Write(vec.X);
  133. writer.Write(vec.Y);
  134. writer.Write(vec.Z);
  135. }
  136. /// <summary>
  137. /// Write vector4 to stream
  138. /// </summary>
  139. /// <param name="writer">Writer</param>
  140. /// <param name="vec">Vector4</param>
  141. public static void WriteVector4(BinaryWriter writer, Vector4 vec)
  142. {
  143. if (writer == null)
  144. throw new ArgumentNullException("writer");
  145. writer.Write(vec.X);
  146. writer.Write(vec.Y);
  147. writer.Write(vec.Z);
  148. writer.Write(vec.W);
  149. }
  150. /// <summary>
  151. /// Write matrix to stream
  152. /// </summary>
  153. /// <param name="writer">Writer</param>
  154. /// <param name="matrix">Matrix</param>
  155. public static void WriteMatrix(BinaryWriter writer, Matrix matrix)
  156. {
  157. if (writer == null)
  158. throw new ArgumentNullException("writer");
  159. writer.Write(matrix.M11);
  160. writer.Write(matrix.M12);
  161. writer.Write(matrix.M13);
  162. writer.Write(matrix.M14);
  163. writer.Write(matrix.M21);
  164. writer.Write(matrix.M22);
  165. writer.Write(matrix.M23);
  166. writer.Write(matrix.M24);
  167. writer.Write(matrix.M31);
  168. writer.Write(matrix.M32);
  169. writer.Write(matrix.M33);
  170. writer.Write(matrix.M34);
  171. writer.Write(matrix.M41);
  172. writer.Write(matrix.M42);
  173. writer.Write(matrix.M43);
  174. writer.Write(matrix.M44);
  175. }
  176. #endregion
  177. #region Read Helpers
  178. /// <summary>
  179. /// Read vector3 from stream
  180. /// </summary>
  181. /// <param name="reader">Reader</param>
  182. /// <returns>Vector3</returns>
  183. public static Vector3 ReadVector3(BinaryReader reader)
  184. {
  185. if (reader == null)
  186. throw new ArgumentNullException("reader");
  187. return new Vector3(
  188. reader.ReadSingle(),
  189. reader.ReadSingle(),
  190. reader.ReadSingle());
  191. }
  192. /// <summary>
  193. /// Read vector4 from stream
  194. /// </summary>
  195. /// <param name="reader">Reader</param>
  196. /// <returns>Vector4</returns>
  197. public static Vector4 ReadVector4(BinaryReader reader)
  198. {
  199. if (reader == null)
  200. throw new ArgumentNullException("reader");
  201. return new Vector4(
  202. reader.ReadSingle(),
  203. reader.ReadSingle(),
  204. reader.ReadSingle(),
  205. reader.ReadSingle());
  206. }
  207. /// <summary>
  208. /// Read matrix from stream
  209. /// </summary>
  210. /// <param name="reader">Reader</param>
  211. /// <returns>Matrix</returns>
  212. public static Matrix ReadMatrix(BinaryReader reader)
  213. {
  214. if (reader == null)
  215. throw new ArgumentNullException("reader");
  216. return new Matrix(
  217. reader.ReadSingle(),
  218. reader.ReadSingle(),
  219. reader.ReadSingle(),
  220. reader.ReadSingle(),
  221. reader.ReadSingle(),
  222. reader.ReadSingle(),
  223. reader.ReadSingle(),
  224. reader.ReadSingle(),
  225. reader.ReadSingle(),
  226. reader.ReadSingle(),
  227. reader.ReadSingle(),
  228. reader.ReadSingle(),
  229. reader.ReadSingle(),
  230. reader.ReadSingle(),
  231. reader.ReadSingle(),
  232. reader.ReadSingle());
  233. }
  234. #endregion
  235. }
  236. }