示例#1
0
        public void Compile()
        {
            ParsedPath stringsFileName = Target.InputFiles.Where(f => f.Extension == ".strings").First();
            ParsedPath xnbFileName     = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();
            ParsedPath csFileName      = Target.OutputFiles.Where(f => f.Extension == ".cs").First();

            string className;

            Target.Properties.GetOptionalValue("ClassName", out className, stringsFileName.File + "Strings");

            StringsContent stringsData = CreateStringsData(className, StringsFileReaderV1.ReadFile(stringsFileName));

            string[] strings = stringsData.Strings.Select(s => s.Value).ToArray();

            if (!Directory.Exists(xnbFileName.VolumeAndDirectory))
            {
                Directory.CreateDirectory(xnbFileName.VolumeAndDirectory);
            }

            XnbFileWriterV5.WriteFile(strings, xnbFileName);

            if (!Directory.Exists(csFileName.VolumeAndDirectory))
            {
                Directory.CreateDirectory(csFileName.VolumeAndDirectory);
            }

            using (TextWriter writer = new StreamWriter(csFileName))
            {
                WriteCsOutput(writer, stringsData);
            }
        }
示例#2
0
        public override void Initialize(XnbFileWriterV5 xnbWriter)
        {
            if (elementTypeWriter == null)
            {
                elementTypeWriter = xnbWriter.GetTypeWriter(typeof(T));
            }

            base.Initialize(xnbWriter);
        }
示例#3
0
        public void Compile()
        {
            IEnumerable <ParsedPath> svgPaths = Target.InputFiles.Where(f => f.Extension == ".svg");
            ParsedPath pdfPath = Target.OutputFiles.Where(f => f.Extension == ".pdf").First();
            ParsedPath xnbPath = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();

            // TODO: Ensure that pdf and xnb have the same root directories (and volumes)

            int numRows;
            int numCols;

            this.Target.Properties.GetOptionalValue("Rows", out numRows, 1);
            this.Target.Properties.GetOptionalValue("Columns", out numCols, 1);

            ParsedPath nUpSvgPath = null;

            try
            {
                if (svgPaths.Count() > 1)
                {
                    nUpSvgPath = pdfPath.WithFileAndExtension(
                        String.Format("{0}_{1}x{2}.svg", pdfPath.File, numRows, numCols));

                    CreateNupSvg(svgPaths, nUpSvgPath, numRows, numCols);
                }

                if (!Directory.Exists(pdfPath.VolumeAndDirectory))
                {
                    Directory.CreateDirectory(pdfPath.VolumeAndDirectory);
                }

                ImageTools.SvgToPdfWithInkscape(nUpSvgPath == null ? svgPaths.First() : nUpSvgPath, pdfPath);
            }
            finally
            {
                if (nUpSvgPath != null)
                {
                    File.Delete(nUpSvgPath);
                }
            }

            List <string> pdfInfo = new List <string>();

            pdfInfo.Add(this.Target.Properties.GetRequiredValue("Pinboard"));
            pdfInfo.Add(this.Target.Properties.GetRequiredValue("Rectangle"));
            pdfInfo.Add(numRows.ToString());
            pdfInfo.Add(numCols.ToString());

            if (!Directory.Exists(xnbPath.VolumeAndDirectory))
            {
                Directory.CreateDirectory(xnbPath.VolumeAndDirectory);
            }

            XnbFileWriterV5.WriteFile(pdfInfo, xnbPath);
        }
示例#4
0
        public void Compile()
        {
            ParsedPath pngFileName = Target.InputFiles.Where(f => f.Extension == ".png").First();
            ParsedPath xnbFileName = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();

            string           compressionType;
            Texture2DContent textureContent;

            Target.Properties.GetOptionalValue("CompressionType", out compressionType, "None");

            ImageTools.CompressPngToTexture2DContent(pngFileName, compressionType, out textureContent);

            XnbFileWriterV5.WriteFile(textureContent, xnbFileName);
        }
示例#5
0
        public virtual void Initialize(XnbFileWriterV5 xnbWriter)
        {
            Type writerType = this.GetType();

            if (genericArgumentWriters == null && writerType.IsGenericType)
            {
                genericArgumentWriters = new List <ContentTypeWriter>();

                foreach (Type type in writerType.GetGenericArguments())
                {
                    genericArgumentWriters.Add(xnbWriter.GetTypeWriter(type));
                }
            }
        }
示例#6
0
        public void Compile()
        {
            ParsedPath wavFileName = Target.InputFiles.Where(f => f.Extension == ".wav").First();
            ParsedPath xnbFileName = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();

            WavFile      wavFile = WavFileReader.ReadFile(wavFileName);
            AudioContent ac      = new AudioContent(wavFile);

            if (!Directory.Exists(xnbFileName.VolumeAndDirectory))
            {
                Directory.CreateDirectory(xnbFileName.VolumeAndDirectory);
            }

            XnbFileWriterV5.WriteFile(ac, xnbFileName);
        }
示例#7
0
        public void Compile()
        {
            ParsedPath spriteFontFileName = Target.InputFiles.Where(f => f.Extension == ".spritefont").First();
            ParsedPath stringsFileName    = Target.InputFiles.Where(f => f.Extension == ".strings").First();
            ParsedPath xnbFileName        = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();

            SpriteFontFile sff = SpriteFontFileReader.ReadFile(spriteFontFileName);
            StringsFileV1  sf  = StringsFileReaderV1.ReadFile(stringsFileName);

            HashSet <char> hs = new HashSet <char>();

            foreach (var item in sf.Strings)
            {
                for (int i = 0; i < item.Value.Length; i++)
                {
                    hs.Add(item.Value[i]);
                }
            }

            foreach (var region in sff.CharacterRegions)
            {
                for (char c = region.Start; c <= region.End; c++)
                {
                    hs.Add(c);
                }
            }

            List <char>       fontChars  = hs.OrderBy(c => c).ToList();
            FontSlant         fontSlant  = (sff.Style == SpriteFontFile.FontStyle.Italic ? FontSlant.Italic : FontSlant.Normal);
            FontWeight        fontWeight = (sff.Style == SpriteFontFile.FontStyle.Bold ? FontWeight.Bold : FontWeight.Normal);
            ParsedPath        pngFile    = xnbFileName.WithExtension(".png");
            SpriteFontContent sfc        = CreateSpriteFontContent(
                sff.FontName, sff.Size, fontSlant, fontWeight, sff.Spacing, sff.DefaultCharacter, fontChars, pngFile);

            if (!Directory.Exists(xnbFileName.VolumeAndDirectory))
            {
                Directory.CreateDirectory(xnbFileName.VolumeAndDirectory);
            }

            XnbFileWriterV5.WriteFile(sfc, xnbFileName);
        }
示例#8
0
        public void Compile()
        {
            ParsedPath     pinboardFileName = Target.InputFiles.Where(f => f.Extension == ".pinboard").First();
            ParsedPath     xnbFileName      = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();
            PinboardFileV1 pinboard         = PinboardFileCache.Load(pinboardFileName);

            Rectangle[] rectangles = new Rectangle[pinboard.RectInfos.Count + 1];

            rectangles[0] = new Rectangle(pinboard.ScreenRectInfo.X, pinboard.ScreenRectInfo.Y, pinboard.ScreenRectInfo.Width, pinboard.ScreenRectInfo.Height);

            for (int i = 0; i < pinboard.RectInfos.Count; i++)
            {
                rectangles[i + 1] = new Rectangle(pinboard.RectInfos[i].X, pinboard.RectInfos[i].Y, pinboard.RectInfos[i].Width, pinboard.RectInfos[i].Height);
            }

            if (!Directory.Exists(xnbFileName.VolumeAndDirectory))
            {
                Directory.CreateDirectory(xnbFileName.VolumeAndDirectory);
            }

            XnbFileWriterV5.WriteFile(rectangles, xnbFileName);
        }
示例#9
0
        public void Compile()
        {
            IEnumerable <ParsedPath> svgFileNames  = Target.InputFiles.Where(f => f.Extension == ".svg");
            ParsedPath            pinboardFileName = Target.InputFiles.Where(f => f.Extension == ".pinboard").First();
            ParsedPath            xnbFileName      = Target.OutputFiles.Where(f => f.Extension == ".xnb").First();
            PinboardFileV1        pinboardFile     = PinboardFileCache.Load(pinboardFileName);
            List <ImagePlacement> placements       = new List <ImagePlacement>();
            string rectangleName = this.Target.Properties.GetRequiredValue("Rectangle");

            PinboardFileV1.RectangleInfo rectInfo = pinboardFile.GetRectangleInfoByName(rectangleName);

            if (rectInfo == null)
            {
                throw new ContentFileException("Rectangle {0} not found in pinboard file {1}".CultureFormat(rectangleName, pinboardFileName));
            }

            string converterName = Target.Properties.GetOptionalValue("Converter", "Inkscape").ToLower();

            if (converterName != "inkscape" && converterName != "rsvg")
            {
                throw new ContentFileException("Unknown SVG converter '{0}'".CultureFormat(converterName));
            }

            ParsedPath combinedPngPathName = xnbFileName.WithExtension(".png");

            try
            {
                int row = 0;

                foreach (var svgFileName in svgFileNames)
                {
                    int col = 0;

                    if (rectInfo == null)
                    {
                        throw new InvalidOperationException(
                                  "Rectangle '{0}' not found in pinboard '{1}'".CultureFormat(rectangleName, pinboardFileName));
                    }

                    // TODO-johnls: This should probably go in an intermediate file directory
                    ParsedPath pngFile = xnbFileName.WithFileAndExtension(String.Format("{0}_{1}_{2}.png",
                                                                                        svgFileName.File, row, col));

                    placements.Add(new ImagePlacement(pngFile,
                                                      new Rectangle(col * rectInfo.Width, row * rectInfo.Height, rectInfo.Width, rectInfo.Height)));

                    switch (converterName)
                    {
                    default:
                    case "rsvg":
                        ImageTools.SvgToPngWithRSvg(svgFileName, pngFile, rectInfo.Width, rectInfo.Height);
                        break;

                    case "inkscape":
                        ImageTools.SvgToPngWithInkscape(svgFileName, pngFile, rectInfo.Width, rectInfo.Height);
                        break;
                    }
                }

                ImageTools.CombinePngs(placements, combinedPngPathName);

                Texture2DContent textureContent;

                ImageTools.CompressPngToTexture2DContent(
                    combinedPngPathName,
                    this.Target.Properties.GetOptionalValue("CompressionType", "None"),
                    out textureContent);

                XnbFileWriterV5.WriteFile(textureContent, xnbFileName);
            }
            finally
            {
                foreach (var placement in placements)
                {
                    if (File.Exists(placement.ImageFile))
                    {
                        File.Delete(placement.ImageFile);
                    }
                }

                if (File.Exists(combinedPngPathName))
                {
                    File.Delete(combinedPngPathName);
                }
            }
        }