Ejemplo n.º 1
0
        /// <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);
        }