FileHelper.cs 7.8 KB

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