private void WriteLane(ILaneDefinition lane, XmlDocument xml, XmlNode node) { var widthNode = xml.CreateElement("width"); widthNode.InnerText = lane.Width.ToString(CultureInfo.InvariantCulture); node.AppendChild(widthNode); var typeNode = xml.CreateElement("type"); typeNode.InnerText = lane.LaneType.ToString(); node.AppendChild(typeNode); var flagsNode = xml.CreateElement("flags"); flagsNode.InnerText = lane.LaneFlags.ToString(); node.AppendChild(flagsNode); var centerOffsetNode = xml.CreateElement("centerOffset"); centerOffsetNode.InnerText = lane.CenterOffset.ToString(); node.AppendChild(centerOffsetNode); var rangeFlagsNode = xml.CreateElement("rangeFlags"); node.AppendChild(rangeFlagsNode); for (var i = 0; i < lane.RangeFlags.Count; i++) { var rangeFlagNode = xml.CreateElement("rangeFlag"); var indexAttribute = xml.CreateAttribute("index"); indexAttribute.Value = i.ToString(); rangeFlagNode.Attributes.Append(indexAttribute); WriteRangeFlag(lane.RangeFlags[i], xml, rangeFlagNode); rangeFlagsNode.AppendChild(rangeFlagNode); } }
private void ReadLane(ILaneDefinition lane, IRoadmapFactory roadmapFactory, XmlNode laneNode) { var width = float.Parse(laneNode.GetFieldValue("width")); var type = (LaneType)Enum.Parse(typeof(LaneType), laneNode.GetFieldValue("type")); var flags = (LaneFlags)Enum.Parse(typeof(LaneFlags), laneNode.GetFieldValue("flags")); var centerOffset = ushort.Parse(laneNode.GetFieldValue("centerOffset")); lane.Width = width; lane.LaneType = type; lane.LaneFlags = flags; lane.CenterOffset = centerOffset; var rangeFlagNodes = laneNode.SelectNodes("rangeFlags/rangeFlag"); foreach (XmlNode rangeFlagNode in rangeFlagNodes) { IRangeFlag rangeFlag = roadmapFactory.RangeFlag(); ReadRangeFlag(rangeFlag, rangeFlagNode); lane.RangeFlags.Add(rangeFlag); } }
private void ReadRoad(IRoadDefinition road, IRoadmapFactory roadmapFactory, XmlNode roadNode) { var roadGraphEdgeIndex = StrWithMaxValueNegativeOneToUshort(roadNode.GetFieldValue("roadGraphEdgeIndex")); var oppositeRoadGraphEdgeIndex = StrWithMaxValueNegativeOneToUshort(roadNode.GetFieldValue("oppositeRoadGraphEdgeIndex")); var oppositeLanesCount = byte.Parse(roadNode.GetFieldValue("oppositeLanesCount")); var forwardLanesCount = byte.Parse(roadNode.GetFieldValue("forwardLanesCount")); var maxSpawnedCars = byte.Parse(roadNode.GetFieldValue("maxSpawnedCars")); var direction = (RoadDirection)Enum.Parse(typeof(RoadDirection), roadNode.GetFieldValue("direction")); var splineIndex = ushort.Parse(roadNode.GetFieldValue("splineIndex")); var type = (RoadType)Enum.Parse(typeof(RoadType), roadNode.GetFieldValue("type")); road.RoadGraphEdgeIndex = roadGraphEdgeIndex; road.OppositeRoadGraphEdgeIndex = oppositeRoadGraphEdgeIndex; road.OppositeLanesCount = oppositeLanesCount; road.ForwardLanesCount = forwardLanesCount; road.MaxSpawnedCars = maxSpawnedCars; road.Direction = direction; road.RoadSplineIndex = splineIndex; road.RoadType = type; var laneNodes = roadNode.SelectNodes("lanes/lane"); foreach (XmlNode laneNode in laneNodes) { ILaneDefinition lane = roadmapFactory.Lane(); ReadLane(lane, roadmapFactory, laneNode); road.Lanes.Add(lane); } var rangeFlagNodes = roadNode.SelectNodes("rangeFlags/rangeFlag"); foreach (XmlNode rangeFlagNode in rangeFlagNodes) { IRangeFlag rangeFlag = roadmapFactory.RangeFlag(); ReadRangeFlag(rangeFlag, rangeFlagNode); road.RangeFlags.Add(rangeFlag); } }