public ResourcesFile FindResourcesFile(ISerializedFile ifile, string resName) { SerializedFile file = (SerializedFile)ifile; resName = FilenameUtils.FixResourcePath(resName); // check asset bundles / web files string filePath = file.FilePath; foreach (ResourcesFile res in m_resources) { if (res.FilePath == filePath && res.Name == resName) { return(res.CreateReference()); } } string resPath = m_resourceCallback?.Invoke(resName); if (resPath == null) { return(null); } using (SmartStream stream = SmartStream.OpenRead(resPath)) { return(new ResourcesFile(stream, resPath, resName, 0, stream.Length)); } }
public IResourceFile FindResourceFile(string resName) { string fixedName = FilenameUtils.FixResourcePath(resName); if (m_resources.TryGetValue(fixedName, out ResourceFile file)) { return(file); } string resPath = m_resourceCallback?.Invoke(fixedName); if (resPath == null) { Logger.Log(LogType.Warning, LogCategory.Import, $"Resource file '{resName}' hasn't been found"); m_resources.Add(fixedName, null); return(null); } using (ResourceFileScheme scheme = ResourceFile.LoadScheme(resPath, fixedName)) { ResourceFile resourceFile = scheme.ReadFile(); AddResourceFile(resourceFile); } Logger.Log(LogType.Info, LogCategory.Import, $"Resource file '{resName}' has been loaded"); return(m_resources[fixedName]); }
internal SerializedFile(IFileCollection collection, IAssemblyManager manager, SerializedFileScheme scheme) { if (collection == null) { throw new ArgumentNullException(nameof(collection)); } if (manager == null) { throw new ArgumentNullException(nameof(manager)); } if (scheme == null) { throw new ArgumentNullException(nameof(scheme)); } Collection = collection; AssemblyManager = manager; FilePath = scheme.FilePath; NameOrigin = scheme.Name; Name = FilenameUtils.FixFileIdentifier(scheme.Name); Flags = scheme.Flags; Header = scheme.Header; Metadata = scheme.Metadata; }
public string RequestDependency(string dependency) { if (Files.TryGetValue(dependency, out string dependencyPath)) { return(dependencyPath); } foreach (string dataPath in DataPathes) { string filePath = Path.Combine(dataPath, dependency); if (MultiFileStream.Exists(filePath)) { return(filePath); } if (FilenameUtils.IsDefaultResource(dependency)) { return(FindEngineDependency(dataPath, FilenameUtils.DefaultResourceName1) ?? FindEngineDependency(dataPath, FilenameUtils.DefaultResourceName2)); } else if (FilenameUtils.IsBuiltinExtra(dependency)) { return(FindEngineDependency(dataPath, FilenameUtils.BuiltinExtraName1) ?? FindEngineDependency(dataPath, FilenameUtils.BuiltinExtraName2)); } } return(null); }
private void ReadScheme() { using (PartialStream stream = new PartialStream(m_stream, m_offset, m_size)) { using (EndianReader reader = new EndianReader(stream, EndianType.BigEndian)) { Header.Read(reader); } EndianType endianess = Header.SwapEndianess ? EndianType.BigEndian : EndianType.LittleEndian; using (SerializedFileReader reader = new SerializedFileReader(stream, endianess, Header.Generation)) { if (IsMetadataAtTheEnd(reader.Generation)) { reader.BaseStream.Position = Header.FileSize - Header.MetadataSize; reader.BaseStream.Position++; } Metadata.Read(reader); } } #warning TEMP HACK Flags = Metadata.Hierarchy.Platform == Platform.NoTarget ? TransferInstructionFlags.NoTransferInstructionFlags : Flags; if (FilenameUtils.IsEngineResource(Name) || Header.Generation < FileGeneration.FG_500a1 && FilenameUtils.IsBuiltinExtra(Name)) { Flags |= TransferInstructionFlags.IsBuiltinResourcesFile; } Flags |= Header.SwapEndianess ? TransferInstructionFlags.SwapEndianess : TransferInstructionFlags.NoTransferInstructionFlags; }
public DependencyCollection(FileCollection fileCollection, IEnumerable <FileEntry> entries, Action <string> dependencyCallback) { if (fileCollection == null) { throw new ArgumentNullException(nameof(fileCollection)); } if (entries == null) { throw new ArgumentNullException(nameof(entries)); } if (dependencyCallback == null) { throw new ArgumentNullException(nameof(dependencyCallback)); } m_fileCollection = fileCollection; Dictionary <string, FileEntry> fileEntries = new Dictionary <string, FileEntry>(); foreach (FileEntry entry in entries) { string name = FilenameUtils.FixFileIdentifier(entry.Name); fileEntries.Add(name, entry); } m_entries = fileEntries; m_dependencyCallback = dependencyCallback; }
public void ReadFiles() { foreach (FileEntry entry in m_entries.Values) { if (entry.EntryType == FileEntryType.Resource) { entry.ReadResourcesFile(m_fileCollection); } } foreach (FileEntry entry in m_entries.Values) { if (entry.EntryType == FileEntryType.Serialized) { string name = FilenameUtils.FixFileIdentifier(entry.Name); if (m_loadedFiles.Add(name)) { entry.ReadSerializedFile(m_fileCollection, OnRequestDependency); } } } foreach (FileEntry entry in m_entries.Values) { if (entry.EntryType == FileEntryType.Bundle) { entry.ReadBundleFile(m_fileCollection); } else if (entry.EntryType == FileEntryType.Web) { entry.ReadWebFile(m_fileCollection); } } }
private static AssetLayout GetLayout(GameCollection collection, SerializedFileScheme scheme, string name) { if (!SerializedFileMetadata.HasPlatform(scheme.Header.Version)) { return(collection.Layout); } if (FilenameUtils.IsDefaultResource(name)) { return(collection.Layout); } LayoutInfo info = new LayoutInfo(scheme.Metadata.UnityVersion, scheme.Metadata.TargetPlatform, scheme.Flags); return(collection.GetLayout(info)); }
private static AssetLayout GetLayout(GameCollection collection, SerializedFileScheme scheme, string name) { if (!RTTIClassHierarchyDescriptor.HasPlatform(scheme.Header.Generation)) { return(collection.Layout); } if (FilenameUtils.IsDefaultResource(name)) { return(collection.Layout); } LayoutInfo info = new LayoutInfo(scheme.Metadata.Hierarchy.Version, scheme.Metadata.Hierarchy.Platform, scheme.Flags); return(collection.GetLayout(info)); }
internal SerializedFile(GameCollection collection, SerializedFileScheme scheme) { Collection = collection ?? throw new ArgumentNullException(nameof(collection)); FilePath = scheme.FilePath; NameOrigin = scheme.Name; Name = FilenameUtils.FixFileIdentifier(scheme.Name); Layout = GetLayout(collection, scheme, Name); Header = scheme.Header; Metadata = scheme.Metadata; for (int i = 0; i < Metadata.Entries.Length; i++) { m_assetEntryLookup.Add(Metadata.Entries[i].PathID, i); } }
internal SerializedFile(IFileCollection collection, IAssemblyManager manager, SerializedFileScheme scheme) { Collection = collection ?? throw new ArgumentNullException(nameof(collection)); AssemblyManager = manager ?? throw new ArgumentNullException(nameof(manager)); FilePath = scheme.FilePath; NameOrigin = scheme.Name; Name = FilenameUtils.FixFileIdentifier(scheme.Name); Flags = scheme.Flags; Header = scheme.Header; Metadata = scheme.Metadata; for (int i = 0; i < Metadata.Entries.Length; i++) { m_assetEntryLookup.Add(Metadata.Entries[i].PathID, i); } }
public FileScheme(SmartStream stream, long offset, long size, string filePath, string fileName) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (string.IsNullOrEmpty(filePath)) { throw new ArgumentNullException(nameof(filePath)); } m_stream = stream.CreateReference(); m_offset = offset; m_size = size; FilePath = filePath; NameOrigin = fileName; Name = FilenameUtils.FixFileIdentifier(fileName); }
private void ReadScheme() { using (PartialStream stream = new PartialStream(m_stream, m_offset, m_size)) { using (EndianReader reader = new EndianReader(stream, EndianType.BigEndian)) { Header.Read(reader); } EndianType endianess = EndianType.LittleEndian; if (SerializedFileHeader.HasEndian(Header.Generation)) { endianess = Header.SwapEndianess ? EndianType.BigEndian : EndianType.LittleEndian; } using (SerializedReader reader = new SerializedReader(stream, endianess, Name, Header.Generation)) { if (SerializedFileMetadata.IsMetadataAtTheEnd(reader.Generation)) { reader.BaseStream.Position = Header.FileSize - Header.MetadataSize; reader.BaseStream.Position++; } Metadata.Read(reader); } } SerializedFileMetadataConverter.CombineFormats(Header.Generation, Metadata); RTTIClassHierarchyDescriptorConverter.FixResourceVersion(Name, ref Metadata.Hierarchy); #warning TEMP HACK if (Metadata.Hierarchy.Platform == Platform.NoTarget) { Flags = TransferInstructionFlags.NoTransferInstructionFlags; } if (FilenameUtils.IsEngineResource(Name) || Header.Generation < FileGeneration.FG_500a1 && FilenameUtils.IsBuiltinExtra(Name)) { Flags |= TransferInstructionFlags.IsBuiltinResourcesFile; } if (Header.SwapEndianess) { Flags |= TransferInstructionFlags.SwapEndianess; } }
public bool RequestDependency(string dependency) { if (Files.TryGetValue(dependency, out string dependencyPath)) { LoadDependency(dependency, dependencyPath); return(true); } foreach (string dataPath in DataPathes) { string filePath = Path.Combine(dataPath, dependency); if (FileMultiStream.Exists(filePath)) { LoadDependency(dependency, filePath); return(true); } if (FilenameUtils.IsDefaultResource(dependency)) { if (LoadEngineDependency(dataPath, FilenameUtils.DefaultResourceName1)) { return(true); } if (LoadEngineDependency(dataPath, FilenameUtils.DefaultResourceName2)) { return(true); } } else if (FilenameUtils.IsBuiltinExtra(dependency)) { if (LoadEngineDependency(dataPath, FilenameUtils.BuiltinExtraName1)) { return(true); } if (LoadEngineDependency(dataPath, FilenameUtils.BuiltinExtraName2)) { return(true); } } } return(false); }
public IResourceFile FindResourceFile(string resName) { string fixedName = FilenameUtils.FixResourcePath(resName); if (m_resources.TryGetValue(fixedName, out ResourceFile file)) { return(file); } string resPath = m_resourceCallback?.Invoke(fixedName); if (resPath == null) { m_resources.Add(fixedName, null); return(null); } using (ResourceFileScheme scheme = ResourceFile.LoadScheme(resPath, fixedName)) { AddFile(scheme, this, AssemblyManager); } return(m_resources[fixedName]); }
private void UpdateFlags() { Flags = TransferInstructionFlags.SerializeGameRelease; if (RTTIClassHierarchyDescriptor.HasPlatform(Header.Generation)) { if (Metadata.Hierarchy.Platform == Platform.NoTarget) { Flags = TransferInstructionFlags.NoTransferInstructionFlags; if (FilePath.EndsWith(".unity", StringComparison.Ordinal)) { Flags |= TransferInstructionFlags.SerializeEditorMinimalScene; } } } if (FilenameUtils.IsEngineResource(Name) || Header.Generation < FileGeneration.FG_500a1 && FilenameUtils.IsBuiltinExtra(Name)) { Flags |= TransferInstructionFlags.IsBuiltinResourcesFile; } if (Header.SwapEndianess || Metadata.SwapEndianess) { Flags |= TransferInstructionFlags.SwapEndianess; } }
private void UpdateFlags() { Flags = TransferInstructionFlags.SerializeGameRelease; if (SerializedFileMetadata.HasPlatform(Header.Version)) { if (Metadata.TargetPlatform == Platform.NoTarget) { Flags = TransferInstructionFlags.NoTransferInstructionFlags; if (FilePath.EndsWith(".unity", StringComparison.Ordinal)) { Flags |= TransferInstructionFlags.SerializeEditorMinimalScene; } } } if (FilenameUtils.IsEngineResource(Name) || Header.Version < FormatVersion.Unknown_10 && FilenameUtils.IsBuiltinExtra(Name)) { Flags |= TransferInstructionFlags.IsBuiltinResourcesFile; } if (Header.Endianess || Metadata.SwapEndianess) { Flags |= TransferInstructionFlags.SwapEndianess; } }
protected FileScheme(string filePath, string fileName) { FilePath = filePath ?? throw new ArgumentNullException(nameof(filePath)); NameOrigin = fileName; Name = FilenameUtils.FixFileIdentifier(fileName); }