//----------------------------------------------------------------------------- // TrackData.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; using RacingGame.Helpers; #if NETFX_CORE using Serializable = System.Runtime.Serialization.DataContractAttribute; #endif namespace RacingGame.Tracks { /// /// Track data, imported from 3ds max data. See TrackImporter class. /// public class TrackData { /// /// Directory where all the track data files are stored. /// public const string Directory = "Content"; /// /// Extension for the track data files. /// public const string Extension = "Track"; /// /// Track points /// private List trackPoints = new List(); /// /// Width helper /// [Serializable] public class WidthHelper { /// /// Position /// public Vector3 pos; /// /// Scale /// public float scale; /// /// Create width helper /// public WidthHelper() { } /// /// Create width helper /// /// Set position /// Set scale public WidthHelper(Vector3 setPos, float setScale) { pos = setPos; scale = setScale; } } /// /// Width helper position /// private List widthHelpers = new List(); /// /// Road helper /// [Serializable] public class RoadHelper { /// /// Helper type /// public enum HelperType { Tunnel, Palms, Laterns, Reset, } /// /// Type /// public HelperType type; /// /// Position /// public Vector3 pos; /// /// Create road helper /// public RoadHelper() { } /// /// Create road helper /// /// Set type /// Set position public RoadHelper(HelperType setType, Vector3 setPos) { type = setType; pos = setPos; } } /// /// Tunnel helper position /// private List roadHelpers = new List(); /// /// Neutral object /// [Serializable] public class NeutralObject { /// /// Model name /// public string modelName; /*not required, just use the matrix /// /// Position /// public Vector3 pos; */ /// /// Matrix /// public Matrix matrix; /// /// Create neutral object /// public NeutralObject() { } /// /// Create neutral object /// /// Set model name /// Set matrix public NeutralObject(string setModelName, Matrix setMatrix) { modelName = setModelName; matrix = setMatrix; } } /// /// List of neutral objects used in this level /// private List objects = new List(); /// /// Track points /// /// List public List TrackPoints { get { return trackPoints; } } /// /// Width helpers /// /// List public List WidthHelpers { get { return widthHelpers; } } /// /// Tunnel helper position /// /// List public List RoadHelpers { get { return roadHelpers; } } /// /// Neutrals objects /// /// List public List NeutralsObjects { get { return objects; } } /// /// Create track data, empty constructor, required for Serialization. /// public TrackData() { } /// /// Create track data (used only in TrackImporter). /// /// Set filename /// Set track points /// Set width helpers /// Set road helpers /// Set objects public TrackData(List setTrackPoints, List setWidthHelpers, List setRoadHelpers, List setObjects) { trackPoints = setTrackPoints; widthHelpers = setWidthHelpers; roadHelpers = setRoadHelpers; objects = setObjects; } /// /// Load track data /// /// Set filename public static TrackData Load(string setFilename) { // Load track data using (StreamReader file = new StreamReader(TitleContainer.OpenStream( Path.Combine(Directory, setFilename + "." + Extension)))) { // Load everything into this class with help of the XmlSerializer. TrackData loadedTrack = (TrackData) new XmlSerializer(typeof(TrackData)). Deserialize(file.BaseStream); // Return loaded file return loadedTrack; } } } }