/// <summary> /// Generates mission /// </summary> /// <param name="mdf"></param> /// <returns></returns> public ArbiterMissionDescription GenerateMission(IMdf mdf, ArbiterRoadNetwork arn) { Queue<ArbiterCheckpoint> checks = new Queue<ArbiterCheckpoint>(); List<ArbiterSpeedLimit> speeds = new List<ArbiterSpeedLimit>(); // checkpoints foreach (string s in mdf.CheckpointOrder) { int num = int.Parse(s); checks.Enqueue(new ArbiterCheckpoint(num, arn.Checkpoints[num].AreaSubtypeWaypointId)); } // speeds foreach (SpeedLimit sl in mdf.SpeedLimits) { ArbiterSpeedLimit asl = new ArbiterSpeedLimit(); asl.MaximumSpeed = sl.MaximumVelocity * 0.44704; asl.MinimumSpeed = sl.MinimumVelocity * 0.44704; asl.Traveled = false; ArbiterSegmentId asi = new ArbiterSegmentId(int.Parse(sl.SegmentID)); ArbiterZoneId azi = new ArbiterZoneId(int.Parse(sl.SegmentID)); if (arn.ArbiterZones.ContainsKey(azi)) asl.Area = azi; else if (arn.ArbiterSegments.ContainsKey(asi)) asl.Area = asi; else throw new Exception("Unknown area id: " + sl.SegmentID); speeds.Add(asl); } // return return new ArbiterMissionDescription(checks, speeds); }
// Creates Mdf from an input FileStream public IMdf createMdf(FileStream fileStream) { // File in Read Only mode, convert to stream StreamReader r = new StreamReader(fileStream, Encoding.UTF8); // Create new queue for input buffer Queue q = new Queue(); string word = ""; // Create the Mdf IMdf mdf = new IMdf(); mdf.SpeedLimits = new List<SpeedLimit>(); mdf.CheckpointOrder = new List<string>(); // Loop until reach end of file marker while ((word.Length < 8) || (word.Substring(0, 8) != "end_file")) { // get next word word = parseWord(r, q); if (word == "MDF_name") { word = parseWord(r, q); mdf.Name = word; } else if (word == "RNDF") { word = parseWord(r, q); mdf.RndfName = word; } else if (word == "format_version") { word = parseWord(r, q); mdf.Version = word; } else if (word == "creation_date") { word = parseWord(r, q); mdf.CreationDate = word; } else if (word == "checkpoints") { // get number of checkpoints word = parseWord(r, q); word = parseWord(r, q); mdf.NumberCheckpoints = word; // create checkpoint list word = parseWord(r, q); // loop until end of checkpoints while (word != "end_checkpoints") { // add checkpoint mdf.CheckpointOrder.Add(word); // get next word word = parseWord(r, q); } } else if (word == "speed_limits") { // set number of speed limits word = parseWord(r, q); word = parseWord(r, q); mdf.NumberSpeedLimits = word; // get next word word = parseWord(r, q); // loop until end of speedlimits while (word != "end_speed_limits") { // create new speed limit SpeedLimit sl = new SpeedLimit(); // id sl.SegmentID = word; // min speed word = parseWord(r, q); sl.MinimumVelocity = Double.Parse(word); // max speed word = parseWord(r, q); sl.MaximumVelocity = Double.Parse(word); // add speed limit to list of speed limits mdf.SpeedLimits.Add(sl); // get next word word = parseWord(r, q); } } else if (word == "end_file") { Console.WriteLine("Mdf Parse :: Successful"); } else { Console.WriteLine("Unknown identifier: " + word); } } return mdf; }