//-----------------------------------------------------------------------------
// 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;
}
}
}
}