TrackData.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. //-----------------------------------------------------------------------------
  2. // TrackData.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.Xml;
  13. using System.Xml.Serialization;
  14. using RacingGame.Helpers;
  15. #if NETFX_CORE
  16. using Serializable = System.Runtime.Serialization.DataContractAttribute;
  17. #endif
  18. namespace RacingGame.Tracks
  19. {
  20. /// <summary>
  21. /// Track data, imported from 3ds max data. See TrackImporter class.
  22. /// </summary>
  23. public class TrackData
  24. {
  25. /// <summary>
  26. /// Directory where all the track data files are stored.
  27. /// </summary>
  28. public const string Directory = "Content";
  29. /// <summary>
  30. /// Extension for the track data files.
  31. /// </summary>
  32. public const string Extension = "Track";
  33. /// <summary>
  34. /// Track points
  35. /// </summary>
  36. private List<Vector3> trackPoints = new List<Vector3>();
  37. /// <summary>
  38. /// Width helper
  39. /// </summary>
  40. [Serializable]
  41. public class WidthHelper
  42. {
  43. /// <summary>
  44. /// Position
  45. /// </summary>
  46. public Vector3 pos;
  47. /// <summary>
  48. /// Scale
  49. /// </summary>
  50. public float scale;
  51. /// <summary>
  52. /// Create width helper
  53. /// </summary>
  54. public WidthHelper()
  55. {
  56. }
  57. /// <summary>
  58. /// Create width helper
  59. /// </summary>
  60. /// <param name="setPos">Set position</param>
  61. /// <param name="setScale">Set scale</param>
  62. public WidthHelper(Vector3 setPos, float setScale)
  63. {
  64. pos = setPos;
  65. scale = setScale;
  66. }
  67. }
  68. /// <summary>
  69. /// Width helper position
  70. /// </summary>
  71. private List<WidthHelper> widthHelpers = new List<WidthHelper>();
  72. /// <summary>
  73. /// Road helper
  74. /// </summary>
  75. [Serializable]
  76. public class RoadHelper
  77. {
  78. /// <summary>
  79. /// Helper type
  80. /// </summary>
  81. public enum HelperType
  82. {
  83. Tunnel,
  84. Palms,
  85. Laterns,
  86. Reset,
  87. }
  88. /// <summary>
  89. /// Type
  90. /// </summary>
  91. public HelperType type;
  92. /// <summary>
  93. /// Position
  94. /// </summary>
  95. public Vector3 pos;
  96. /// <summary>
  97. /// Create road helper
  98. /// </summary>
  99. public RoadHelper()
  100. {
  101. }
  102. /// <summary>
  103. /// Create road helper
  104. /// </summary>
  105. /// <param name="setType">Set type</param>
  106. /// <param name="setPos">Set position</param>
  107. public RoadHelper(HelperType setType, Vector3 setPos)
  108. {
  109. type = setType;
  110. pos = setPos;
  111. }
  112. }
  113. /// <summary>
  114. /// Tunnel helper position
  115. /// </summary>
  116. private List<RoadHelper> roadHelpers = new List<RoadHelper>();
  117. /// <summary>
  118. /// Neutral object
  119. /// </summary>
  120. [Serializable]
  121. public class NeutralObject
  122. {
  123. /// <summary>
  124. /// Model name
  125. /// </summary>
  126. public string modelName;
  127. /*not required, just use the matrix
  128. /// <summary>
  129. /// Position
  130. /// </summary>
  131. public Vector3 pos;
  132. */
  133. /// <summary>
  134. /// Matrix
  135. /// </summary>
  136. public Matrix matrix;
  137. /// <summary>
  138. /// Create neutral object
  139. /// </summary>
  140. public NeutralObject()
  141. {
  142. }
  143. /// <summary>
  144. /// Create neutral object
  145. /// </summary>
  146. /// <param name="setModelName">Set model name</param>
  147. /// <param name="setMatrix">Set matrix</param>
  148. public NeutralObject(string setModelName, Matrix setMatrix)
  149. {
  150. modelName = setModelName;
  151. matrix = setMatrix;
  152. }
  153. }
  154. /// <summary>
  155. /// List of neutral objects used in this level
  156. /// </summary>
  157. private List<NeutralObject> objects = new List<NeutralObject>();
  158. /// <summary>
  159. /// Track points
  160. /// </summary>
  161. /// <returns>List</returns>
  162. public List<Vector3> TrackPoints
  163. {
  164. get
  165. {
  166. return trackPoints;
  167. }
  168. }
  169. /// <summary>
  170. /// Width helpers
  171. /// </summary>
  172. /// <returns>List</returns>
  173. public List<WidthHelper> WidthHelpers
  174. {
  175. get
  176. {
  177. return widthHelpers;
  178. }
  179. }
  180. /// <summary>
  181. /// Tunnel helper position
  182. /// </summary>
  183. /// <returns>List</returns>
  184. public List<RoadHelper> RoadHelpers
  185. {
  186. get
  187. {
  188. return roadHelpers;
  189. }
  190. }
  191. /// <summary>
  192. /// Neutrals objects
  193. /// </summary>
  194. /// <returns>List</returns>
  195. public List<NeutralObject> NeutralsObjects
  196. {
  197. get
  198. {
  199. return objects;
  200. }
  201. }
  202. /// <summary>
  203. /// Create track data, empty constructor, required for Serialization.
  204. /// </summary>
  205. public TrackData()
  206. {
  207. }
  208. /// <summary>
  209. /// Create track data (used only in TrackImporter).
  210. /// </summary>
  211. /// <param name="setFilename">Set filename</param>
  212. /// <param name="setTrackPoints">Set track points</param>
  213. /// <param name="setWidthHelpers">Set width helpers</param>
  214. /// <param name="setRoadHelpers">Set road helpers</param>
  215. /// <param name="setObjects">Set objects</param>
  216. public TrackData(List<Vector3> setTrackPoints,
  217. List<WidthHelper> setWidthHelpers,
  218. List<RoadHelper> setRoadHelpers,
  219. List<NeutralObject> setObjects)
  220. {
  221. trackPoints = setTrackPoints;
  222. widthHelpers = setWidthHelpers;
  223. roadHelpers = setRoadHelpers;
  224. objects = setObjects;
  225. }
  226. /// <summary>
  227. /// Load track data
  228. /// </summary>
  229. /// <param name="setFilename">Set filename</param>
  230. public static TrackData Load(string setFilename)
  231. {
  232. // Load track data
  233. using (StreamReader file = new StreamReader(TitleContainer.OpenStream(
  234. Path.Combine(Directory, setFilename + "." + Extension))))
  235. {
  236. // Load everything into this class with help of the XmlSerializer.
  237. TrackData loadedTrack = (TrackData)
  238. new XmlSerializer(typeof(TrackData)).
  239. Deserialize(file.BaseStream);
  240. // Return loaded file
  241. return loadedTrack;
  242. }
  243. }
  244. }
  245. }