예제 #1
0
        public void Process(RegionChunkManager Chunks, WorldMetrics Metrics, String Filename)
        {
            // *** Accumulate list of sign types
            _SignMap = CreateSignMap();


            int    NumLen          = Metrics.NumberOfChunks.ToString().Length;
            int    NumCount        = Metrics.NumberOfChunks;
            string NumFormat       = "D" + NumLen;
            int    ProcessedChunks = 0;

            Console.Write("Scanned " + 0.ToString(NumFormat) + " of " + Metrics.NumberOfChunks.ToString() + " chunks (0%)");
            Point ProcessedCountPoint   = new Point(8, Console.CursorTop);
            Point PercentageUpdatePoint = new Point(Console.CursorLeft - 3, Console.CursorTop);


            // *** Find all signs in the world and scan
            foreach (ChunkRef Chunk in Chunks)
            {
                ProcessedChunks++;
                Console.SetCursorPosition(ProcessedCountPoint.X, ProcessedCountPoint.Y);
                Console.Write(ProcessedChunks.ToString(NumFormat));

                Console.SetCursorPosition(PercentageUpdatePoint.X, PercentageUpdatePoint.Y);
                Console.Write(((100 * ProcessedChunks) / NumCount).ToString() + "%)");

                ProcessChunk(Chunk);
            }
            Console.WriteLine("");
            Console.WriteLine("Scan completed.  Saving sign data...");

            XmlWriter Writer = XmlWriter.Create(Filename);

            Writer.WriteStartElement("Signs");

            // *** Curly braces used to ensure that start and end element counts are matched.
            foreach (SignBase Sign in _ExportableSigns)
            {
                Writer.WriteStartElement("Sign");
                {
                    Writer.WriteAttributeString("Type", Sign.SignType());

                    Writer.WriteStartElement("Location");
                    {
                        Writer.WriteElementString("X", Sign.Location.X.ToString());
                        Writer.WriteElementString("Y", Sign.Location.Y.ToString());
                    }
                    Writer.WriteEndElement();

                    List <KeyValuePair <String, String> > Params = new List <KeyValuePair <string, string> >();

                    Sign.ExportParameters(Params);

                    foreach (KeyValuePair <String, String> Param in Params)
                    {
                        Writer.WriteStartElement(Param.Key);
                        {
                            Writer.WriteString(Param.Value);
                        }
                        Writer.WriteEndElement();
                    }
                }
                Writer.WriteEndElement();
            }

            Writer.WriteEndElement();

            Writer.Flush();
            Writer.Close();

            Console.WriteLine("Wrote sign data to file " + Path.GetFileName(Filename));
        }