private void WriteResource(GFDLibrary.Resource resource) { switch (resource.Type) { case ResourceType.Model: WriteModel(( Model )resource); break; case ResourceType.AnimationPackage: WriteAnimationPackage(( AnimationPackage )resource); break; case ResourceType.TextureDictionary: WriteTextureDictionary(( TextureDictionary )resource); break; case ResourceType.MaterialDictionary: WriteMaterialDictionary(( MaterialDictionary )resource); break; case ResourceType.Scene: WriteScene(( Scene )resource); break; case ResourceType.ChunkType000100F9: WriteChunkType000100F9(( ChunkType000100F9 )resource); break; case ResourceType.ChunkType000100F8: WriteBytes((( ChunkType000100F8 )resource).RawData); break; case ResourceType.ShaderCachePS3: WriteShaderCache(( ShaderCachePS3 )resource); break; case ResourceType.ShaderCachePSP2: WriteShaderCache(( ShaderCachePSP2 )resource); break; // Custom resource types case ResourceType.Bundle: WriteResourceBundle(( ResourceBundle )resource); break; case ResourceType.Material: WriteMaterial(resource.Version, ( Material )resource); break; case ResourceType.MaterialAttribute: WriteMaterialAttribute(resource.Version, ( MaterialAttribute )resource); break; default: throw new Exception($"Resource type { resource.Type } can not be written to a file directly."); } }
public static void WriteToStream(GFDLibrary.Resource resource, Stream stream, Endianness endianness) { using (var writer = new ResourceWriter(stream, endianness)) writer.WriteResourceFile(resource); }
// Write resource methods private void WriteResourceFile(GFDLibrary.Resource resource) { WriteResourceFileHeader(resource.Version, GetFileType(resource.Type)); WriteResource(resource); }