public MovementCostFactory()
        {
            MovementCosts = new List<MovementCost>();
            MovementTypeFactory = new MovementTypeFactory();
            TerrainConditionFactory = new TerrainConditionFactory();
            TerrainTypeFactory = new TerrainTypeFactory();

            Uri uri = new Uri(Constants.MovementCostDataPath, UriKind.Relative);
            XElement applicationXml;
            StreamResourceInfo xmlStream = Application.GetResourceStream(uri);
            applicationXml = XElement.Load(xmlStream.Stream);
            var data = from t in applicationXml.Descendants("MovementCost")
                       select t;

            MovementCost movementCost = null;
            foreach (var d in data)
            {
                movementCost = new MovementCost();
                movementCost.MovementCostId = (Int32)d.Element("MovementCostId");
                movementCost.MovementType = MovementTypeFactory.GetMovementType((Int32)d.Element("MovementTypeId"));
                movementCost.TerrainCondition = TerrainConditionFactory.GetTerrainCondition((Int32)d.Element("TerrainConditionId"));
                movementCost.TerrainType = TerrainTypeFactory.GetTerrainType((Int32)d.Element("TerrainTypeId"));
                movementCost.MovementPoints = (Int32)d.Element("MovementPoints");
                MovementCosts.Add(movementCost);
            }
        }
 public TerrainFactory()
 {
     Terrains = new List<Terrain>();
     TerrainTypeFactory = new TerrainTypeFactory();
     PopulateTerrainData();
 }