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); }
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); }
public void IsValidReturnsTrueWhenStreamContainsValidData() => File.OpenRead(FileName1).Using(stream => { Assert.True(ModelTexture.IsValid(stream)); });