Exemple #1
0
        public int Execute()
        {
            var outDir   = Path.GetDirectoryName(MapFile);
            var baseName = Path.GetFileNameWithoutExtension(MapFile);

            var perTexture = new DeserializerBuilder()
                             .IgnoreUnmatchedProperties()
                             .WithAttributeOverride <TextureFrame>(it => it.Data, new YamlIgnoreAttribute())
                             .Build()
                             .Deserialize <PerTexture>(File.ReadAllText(Path.Combine(outDir, YmlFile ?? $"{baseName}.footer.yml")));

            var anyChanges = false;

            var barEntries = File.OpenRead(MapFile).Using(Bar.Read);

            foreach (var entry in barEntries
                     .Where(entry => entry.Type == Bar.EntryType.ModelTexture &&
                            ModelTexture.IsValid(entry.Stream) &&
                            perTexture.Textures.ContainsKey(entry.Name)
                            )
                     )
            {
                var model = perTexture.Textures[entry.Name];

                entry.Stream.SetPosition(0);

                var modelTexture = ModelTexture.Read(entry.Stream);

                model.ConvertBackTo(
                    pngFile =>
                {
                    return(new SpriteBitmap(Path.Combine(outDir, pngFile)));
                },
                    modelTexture.TextureFooterData
                    );

                {
                    var buffer = new MemoryStream();
                    modelTexture.Write(buffer);
                    buffer.Position = 0;

                    entry.Stream = buffer;
                }

                anyChanges |= true;
            }

            if (anyChanges)
            {
                var buffer = new MemoryStream();
                Bar.Write(buffer, barEntries);

                File.WriteAllBytes(MapFile, buffer.ToArray());
            }

            return(0);
        }
Exemple #2
0
        public int Execute()
        {
            var perTexture = new PerTexture();

            var barEntries = File.OpenRead(MapFile).Using(Bar.Read);

            foreach (var entry in barEntries
                     .Where(entry => entry.Type == Bar.EntryType.ModelTexture && ModelTexture.IsValid(entry.Stream))
                     )
            {
                entry.Stream.SetPosition(0);

                var modelTexture = ModelTexture.Read(entry.Stream);

                if (modelTexture.Images == null || !modelTexture.Images.Any())
                {
                    return(1);
                }

                var footerData = modelTexture.TextureFooterData;

                perTexture.Textures[entry.Name] = new TextureFooterDataIMEx(footerData);
            }

            var outDir = Path.Combine(
                Path.GetDirectoryName(MapFile),
                OutputDir ?? "."
                );
            var baseName = Path.GetFileNameWithoutExtension(MapFile);

            Directory.CreateDirectory(outDir);

            File.WriteAllText(
                Path.Combine(outDir, $"{baseName}.footer.yml"),
                new SerializerBuilder()
                .WithTypeConverter(new UseJsonStyleArray <short>())
                .WithTypeConverter(new UseJsonStyleArray <byte>())
                .WithAttributeOverride <TextureFrame>(it => it.Data, new YamlIgnoreAttribute())
                .Build()
                .Serialize(ExportHelper.AlsoExportImages(outDir, baseName, perTexture))
                );

            return(0);
        }
Exemple #3
0
 public void IsValidReturnsTrueWhenStreamContainsValidData() => File.OpenRead(FileName1).Using(stream =>
 {
     Assert.True(ModelTexture.IsValid(stream));
 });