| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- //-----------------------------------------------------------------------------
- // 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
- {
- /// <summary>
- /// Track data, imported from 3ds max data. See TrackImporter class.
- /// </summary>
- public class TrackData
- {
- /// <summary>
- /// Directory where all the track data files are stored.
- /// </summary>
- public const string Directory = "Content";
- /// <summary>
- /// Extension for the track data files.
- /// </summary>
- public const string Extension = "Track";
- /// <summary>
- /// Track points
- /// </summary>
- private List<Vector3> trackPoints = new List<Vector3>();
- /// <summary>
- /// Width helper
- /// </summary>
- [Serializable]
- public class WidthHelper
- {
- /// <summary>
- /// Position
- /// </summary>
- public Vector3 pos;
- /// <summary>
- /// Scale
- /// </summary>
- public float scale;
- /// <summary>
- /// Create width helper
- /// </summary>
- public WidthHelper()
- {
- }
- /// <summary>
- /// Create width helper
- /// </summary>
- /// <param name="setPos">Set position</param>
- /// <param name="setScale">Set scale</param>
- public WidthHelper(Vector3 setPos, float setScale)
- {
- pos = setPos;
- scale = setScale;
- }
- }
- /// <summary>
- /// Width helper position
- /// </summary>
- private List<WidthHelper> widthHelpers = new List<WidthHelper>();
- /// <summary>
- /// Road helper
- /// </summary>
- [Serializable]
- public class RoadHelper
- {
- /// <summary>
- /// Helper type
- /// </summary>
- public enum HelperType
- {
- Tunnel,
- Palms,
- Laterns,
- Reset,
- }
- /// <summary>
- /// Type
- /// </summary>
- public HelperType type;
- /// <summary>
- /// Position
- /// </summary>
- public Vector3 pos;
- /// <summary>
- /// Create road helper
- /// </summary>
- public RoadHelper()
- {
- }
- /// <summary>
- /// Create road helper
- /// </summary>
- /// <param name="setType">Set type</param>
- /// <param name="setPos">Set position</param>
- public RoadHelper(HelperType setType, Vector3 setPos)
- {
- type = setType;
- pos = setPos;
- }
- }
- /// <summary>
- /// Tunnel helper position
- /// </summary>
- private List<RoadHelper> roadHelpers = new List<RoadHelper>();
- /// <summary>
- /// Neutral object
- /// </summary>
- [Serializable]
- public class NeutralObject
- {
- /// <summary>
- /// Model name
- /// </summary>
- public string modelName;
- /*not required, just use the matrix
- /// <summary>
- /// Position
- /// </summary>
- public Vector3 pos;
- */
- /// <summary>
- /// Matrix
- /// </summary>
- public Matrix matrix;
- /// <summary>
- /// Create neutral object
- /// </summary>
- public NeutralObject()
- {
- }
- /// <summary>
- /// Create neutral object
- /// </summary>
- /// <param name="setModelName">Set model name</param>
- /// <param name="setMatrix">Set matrix</param>
- public NeutralObject(string setModelName, Matrix setMatrix)
- {
- modelName = setModelName;
- matrix = setMatrix;
- }
- }
- /// <summary>
- /// List of neutral objects used in this level
- /// </summary>
- private List<NeutralObject> objects = new List<NeutralObject>();
- /// <summary>
- /// Track points
- /// </summary>
- /// <returns>List</returns>
- public List<Vector3> TrackPoints
- {
- get
- {
- return trackPoints;
- }
- }
- /// <summary>
- /// Width helpers
- /// </summary>
- /// <returns>List</returns>
- public List<WidthHelper> WidthHelpers
- {
- get
- {
- return widthHelpers;
- }
- }
- /// <summary>
- /// Tunnel helper position
- /// </summary>
- /// <returns>List</returns>
- public List<RoadHelper> RoadHelpers
- {
- get
- {
- return roadHelpers;
- }
- }
- /// <summary>
- /// Neutrals objects
- /// </summary>
- /// <returns>List</returns>
- public List<NeutralObject> NeutralsObjects
- {
- get
- {
- return objects;
- }
- }
- /// <summary>
- /// Create track data, empty constructor, required for Serialization.
- /// </summary>
- public TrackData()
- {
- }
- /// <summary>
- /// Create track data (used only in TrackImporter).
- /// </summary>
- /// <param name="setFilename">Set filename</param>
- /// <param name="setTrackPoints">Set track points</param>
- /// <param name="setWidthHelpers">Set width helpers</param>
- /// <param name="setRoadHelpers">Set road helpers</param>
- /// <param name="setObjects">Set objects</param>
- public TrackData(List<Vector3> setTrackPoints,
- List<WidthHelper> setWidthHelpers,
- List<RoadHelper> setRoadHelpers,
- List<NeutralObject> setObjects)
- {
- trackPoints = setTrackPoints;
- widthHelpers = setWidthHelpers;
- roadHelpers = setRoadHelpers;
- objects = setObjects;
- }
- /// <summary>
- /// Load track data
- /// </summary>
- /// <param name="setFilename">Set filename</param>
- 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;
- }
- }
- }
- }
|