Example #1
0
        public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName)
        {
            var content = BuildAndLoad <object>(sourceAssetFile, contentImporter, contentProcessor, fileName);

            Compile(OutputFilename, content);
            return(OutputFilename);
        }
Example #2
0
 private static IProcessor FindDefaultProcessor(IImporter importer)
 {
     if (importer == null)
     {
         return(null);
     }
     return(FindProcessor(importer.GetType().GetCustomAttributes(false).OfType <ContentImporterAttribute>().First().DefaultProcessor));
 }
Example #3
0
        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));
        }
Example #4
0
        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;
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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);
            }
        }
Example #7
0
 public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor)
 {
     return(BuildAndLoad <TContent>(sourceAssetFile, contentImporter, contentProcessor, null));
 }
Example #8
0
 private static bool ImporterCompatibleWithFile(IImporter importer, string sourceAssetFile)
 {
     return(importer.GetType().GetCustomAttributes(false)
            .OfType <ContentImporterAttribute>().First()
            .FileExtensions.Any(ext => FileExtensionEquals(ext, Path.GetExtension(sourceAssetFile))));
 }
Example #9
0
 public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor)
 {
     return(Build(sourceAssetFile, contentImporter, contentProcessor, null));
 }
Example #10
0
 public static T Load <T>(Stream input, IImporter importer, IProcessor processor = null, IServiceProvider serviceProvider = null)
 {
     return(Load <T>(ValidateFileStream(input), importer, processor, serviceProvider));
 }
Example #11
0
 public static T LoadContent <T>(string fileName, IImporter importer, IProcessor processor = null)
 {
     return(builder.BuildAndLoad <T>(fileName, importer, processor));
 }
Example #12
0
 public static T LoadContent <T>(Stream input, IImporter importer, IProcessor processor = null)
 {
     return(LoadContent <T>(ValidateFileStream(input), importer, processor));
 }