public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName) { var content = BuildAndLoad <object>(sourceAssetFile, contentImporter, contentProcessor, fileName); Compile(OutputFilename, content); return(OutputFilename); }
private static IProcessor FindDefaultProcessor(IImporter importer) { if (importer == null) { return(null); } return(FindProcessor(importer.GetType().GetCustomAttributes(false).OfType <ContentImporterAttribute>().First().DefaultProcessor)); }
public TRuntime Load <TRuntime>(string sourceAssetFile, IImporter importer, IProcessor processor) { var content = BuildAndLoad <object>(sourceAssetFile, importer, processor, null); if (content == null) { return(default(TRuntime)); } Compile(OutputFilename, content); return(Content.Load <TRuntime>(OutputFilename)); }
public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName) { try { OutputFilename = FindNextValidAssetName(fileName ?? Path.GetFileNameWithoutExtension(sourceAssetFile), ".xnb"); var outputDirectory = Path.GetDirectoryName(OutputFilename); if (!Directory.Exists(outputDirectory)) { Directory.CreateDirectory(outputDirectory); } // Create a dummy file in case a nested build uses the same name File.WriteAllText(OutputFilename, ""); contentImporter = contentImporter ?? FindImporter(null, sourceAssetFile); if (contentImporter == null) { throw new InvalidOperationException(string.Format("Cannot find content importer for {0}", sourceAssetFile)); } contentProcessor = contentProcessor ?? FindDefaultProcessor(contentImporter); Trace.TraceInformation("Building {0} -> {1} with {2} and {3}", sourceAssetFile, OutputFilename, contentImporter != null ? contentImporter.GetType().Name : "<No Importer>", contentProcessor != null ? contentProcessor.GetType().Name : "<No Processor>"); object content = contentImporter.Import(sourceAssetFile, ImporterContext); if (contentProcessor != null) { content = contentProcessor.Process(content, ProcessorContext); } return((TContent)content); } catch (Exception e) { Trace.TraceError("Error importing {0} with asset name {1}", sourceAssetFile, fileName ?? "[Unspecified]"); Trace.WriteLine(e); throw; } }
public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName) { contentImporter = contentImporter ?? FindImporter(null, sourceAssetFile); if (contentImporter == null) { throw new InvalidOperationException(string.Format("Cannot find content importer for {0}", sourceAssetFile)); } var content = contentImporter.Import(sourceAssetFile, ImporterContext); if (contentProcessor != null) { try { outputFilenames.Push(sourceAssetFile); content = contentProcessor.Process(content, ProcessorContext); } finally { LastFilename = outputFilenames.Pop(); } } return((TContent)content); }
public static T Load <T>(string fileName, IImporter importer, IProcessor processor = null, IServiceProvider serviceProvider = null) { // TODO: Race conditions when 2 processes tried to access the file at the same time? var cachedFileName = GetCachedFileName(fileName, processor); if (!File.Exists(cachedFileName)) { var content = LoadContent <object>(fileName, importer, processor); if (content == null) { return(default(T)); } SaveContent(cachedFileName, content); } using (var stream = File.OpenRead(cachedFileName)) { var result = (T)(reader.Read(new BinaryReader(stream), null, serviceProvider)); ObjectCache.Add(new WeakReference(result), cachedFileName); return(result); } }
public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor) { return(BuildAndLoad <TContent>(sourceAssetFile, contentImporter, contentProcessor, null)); }
private static bool ImporterCompatibleWithFile(IImporter importer, string sourceAssetFile) { return(importer.GetType().GetCustomAttributes(false) .OfType <ContentImporterAttribute>().First() .FileExtensions.Any(ext => FileExtensionEquals(ext, Path.GetExtension(sourceAssetFile)))); }
public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor) { return(Build(sourceAssetFile, contentImporter, contentProcessor, null)); }
public static T Load <T>(Stream input, IImporter importer, IProcessor processor = null, IServiceProvider serviceProvider = null) { return(Load <T>(ValidateFileStream(input), importer, processor, serviceProvider)); }
public static T LoadContent <T>(string fileName, IImporter importer, IProcessor processor = null) { return(builder.BuildAndLoad <T>(fileName, importer, processor)); }
public static T LoadContent <T>(Stream input, IImporter importer, IProcessor processor = null) { return(LoadContent <T>(ValidateFileStream(input), importer, processor)); }