public void SaveAndLoad()
        {
            AlgorithmPalette p_original = AlgorithmPalette.DefaultPalette(
                AlgorithmPluginEnumerator.GetAllLoadedAlgorithms());
            DungeonGenerator generator = TestHelpers.GetTestDungeonGenerator();

            Assert.IsNotNull(p_original);

            AlgorithmPaletteSerializer serializer = new AlgorithmPaletteSerializer();
            string paletteFile = System.IO.Path.GetTempFileName();

            serializer.Save(p_original, paletteFile, FileMode.Create);
            Assert.IsTrue(File.Exists(paletteFile));

            AlgorithmPalette p_loaded = serializer.Load(paletteFile);

            Assert.IsNotNull(p_loaded);

            Assert.AreEqual(p_original.Keys.Count, p_loaded.Keys.Count);
            Assert.IsTrue(Enumerable.SequenceEqual(p_original.Keys, p_loaded.Keys));

            foreach (var k in p_original.Keys)
            {
                Assert.AreEqual(p_original[k].Info, p_loaded[k].Info);
                Assert.AreEqual(p_original[k].PaletteColor, p_loaded[k].PaletteColor);
            }

            File.Delete(paletteFile);
        }
Beispiel #2
0
        public AlgorithmPalette Load(string path)
        {
            AlgorithmPalette loadedPalette = null;

            using (Stream fileStr = new FileStream(path, FileMode.Open))
                using (Stream memoryStream = new MemoryStream())
                {
                    // Un ZIP
                    using (ZipArchive arch = new ZipArchive(fileStr, ZipArchiveMode.Read))
                    {
                        ZipArchiveEntry paletteEntry = arch.GetEntry("palette");
                        using (Stream paletteEntryStream = paletteEntry.Open())
                        {
                            paletteEntryStream.CopyTo(memoryStream);
                        }
                    }
                    memoryStream.Seek(0, SeekOrigin.Begin);

                    // Serialize dungeon to XML
                    DataContractSerializer xml = new DataContractSerializer(typeof(AlgorithmPalette));
                    var settings = new XmlReaderSettings();
                    using (var w = XmlReader.Create(memoryStream, settings))
                    {
                        loadedPalette = xml.ReadObject(w) as AlgorithmPalette;
                    }
                }

            return(loadedPalette);
        }
Beispiel #3
0
 /// <summary>
 /// Exports this palette to a color palette loadable by Paint.NET
 /// </summary>
 public void ExportForPdn(AlgorithmPalette p, string path, FileMode mode)
 {
     using (StreamWriter writer = new StreamWriter(File.Open(Path.GetFullPath(path), mode)))
     {
         writer.WriteLine("; paint.net Palette file");
         writer.WriteLine("; Generated by Dungen .NET Core");
         writer.WriteLine(";");
         foreach (var paletteItem in p)
         {
             writer.WriteLine(String.Format("; Color for palette item name {0} (type {1})", paletteItem.Key, paletteItem.Value.Info.Type.AssemblyQualifiedName));
             writer.WriteLine(String.Format("{0:X}", paletteItem.Value.PaletteColor.ToArgb()));
         }
     }
 }
        public void ExportForPdn()
        {
            AlgorithmPalette palette = AlgorithmPalette.DefaultPalette(
                AlgorithmPluginEnumerator.GetAllLoadedAlgorithms());

            Assert.IsNotNull(palette);

            AlgorithmPaletteSerializer serializer = new AlgorithmPaletteSerializer();
            string paletteFile = System.IO.Path.GetTempFileName();

            serializer.ExportForPdn(palette, paletteFile, FileMode.Create);
            Assert.IsTrue(File.Exists(paletteFile));

            // TODO actually inspect PDN template file
        }
Beispiel #5
0
        public void Save(AlgorithmPalette p, string path, FileMode mode)
        {
            if (mode == FileMode.Truncate || mode == FileMode.Append)
            {
                throw new ArgumentException("Invalid file mode to save a Palette.");
            }

            if (null == p)
            {
                throw new ArgumentNullException("Must pass a palette");
            }
            if (null == path || string.Empty == path)
            {
                throw new ArgumentException("Must pass valid path");
            }

            using (Stream fileStr = new FileStream(path, mode))
                using (Stream memoryStream = new MemoryStream())
                {
                    // Serialize dungeon to XML
                    DataContractSerializer xml = new DataContractSerializer(typeof(AlgorithmPalette));
                    var settings = new XmlWriterSettings
                    {
#if DEBUG
                        Indent      = true,
                        IndentChars = "\t",
#endif
                    };
                    using (var w = XmlWriter.Create(memoryStream, settings))
                    {
                        xml.WriteObject(w, p);
                    }

                    // ZIP it up
                    memoryStream.Seek(0, SeekOrigin.Begin);
                    using (ZipArchive arch = new ZipArchive(fileStr, ZipArchiveMode.Create))
                    {
                        ZipArchiveEntry paletteEntry = arch.CreateEntry("palette", CompressionLevel.Fastest);
                        using (Stream paletteEntryStream = paletteEntry.Open())
                        {
                            memoryStream.CopyTo(paletteEntryStream);
                        }
                    }
                }
        }
Beispiel #6
0
        public static Dictionary <AlgorithmPaletteItem, bool[, ]> ParseMasks(Image maskSource, AlgorithmPalette palette)
        {
            Dictionary <AlgorithmPaletteItem, bool[, ]> maskDictionary = new Dictionary <AlgorithmPaletteItem, bool[, ]>();

            foreach (var paletteItem in palette.Values)
            {
                maskDictionary[paletteItem] = GetMask(maskSource, paletteItem.PaletteColor);
            }

            return(maskDictionary);
        }