private static List <ResourceChunk> CreateChunksFromAssets(List <AbstractAsset> allAssets, ProgressWrapper progress) { StringBuilder loudness = new StringBuilder(); List <ResourceChunk> chunks = new List <ResourceChunk>(); foreach (AbstractAsset asset in allAssets) { progress.Report($"Generating {asset.AssetType} chunk \"{asset.AssetName}\".", chunks.Count / (float)allAssets.Count / 2); if (asset is AudioAsset audioAsset) { loudness.AppendLine($"{audioAsset.AssetName} = {audioAsset.Loudness:0.0}"); } ResourceChunk chunk = asset.AssetType switch { AssetType.Model => new ModelChunk(asset.AssetName, 0, 0), AssetType.Shader => new ShaderChunk(asset.AssetName, 0, 0), AssetType.Texture => new TextureChunk(asset.AssetName, 0, 0), _ => new ResourceChunk(asset.AssetType, asset.AssetName, 0, 0), }; chunk.MakeBinary(asset.EditorPath); chunks.Add(chunk); } if (loudness.Length != 0) { progress.Report("Generating Loudness chunk."); byte[] fileBuffer; using (MemoryStream ms = new MemoryStream()) { byte[] fileContents = Encoding.Default.GetBytes(loudness.ToString()); ms.Write(fileContents, 0, fileContents.Length); fileBuffer = ms.ToArray(); } chunks.Add(new ResourceChunk(AssetType.Audio, "loudness", 0U, (uint)fileBuffer.Length) { Buffer = fileBuffer }); } return(chunks); }