public void Init() { if (Initialized) { return; } Initialized = true; Cache = new TimedReferenceCache <ulong, T>(); lock (Cache) { EntriesById = new Dictionary <ulong, Far3ProviderEntry <T> >(); EntriesByName = new Dictionary <string, Far3ProviderEntry <T> >(); if (FarFilePattern != null) { List <string> FarFiles = new List <string>(); foreach (var File in ContentManager.AllFiles) { if (FarFilePattern.IsMatch(File.Replace('\\', '/'))) { FarFiles.Add(File); } } m_FarFiles = FarFiles.ToArray(); } foreach (var FarPath in m_FarFiles) { var archive = new FAR3Archive(ContentManager.GetPath(FarPath)); var entries = archive.GetAllFAR3Entries(); foreach (var entry in entries) { var fileID = ((ulong)entry.FileID) << 32; var referenceItem = new Far3ProviderEntry <T>(this) { ID = fileID | entry.TypeID, Archive = archive, FarEntry = entry }; EntriesById.Add(referenceItem.ID, referenceItem); if (entry.Filename != null) { EntriesByName[entry.Filename.ToLowerInvariant()] = referenceItem; } } } } }
public void Init() { Entries = new Dictionary <ulong, PackingslipEntry <T> >(); Cache = new Dictionary <ulong, T>(); var packingslip = new XmlDocument(); packingslip.Load(ContentManager.GetPath(PackingSlipFile)); var assets = packingslip.GetElementsByTagName("DefineAssetString"); foreach (XmlNode asset in assets) { ulong FileID = Convert.ToUInt64(asset.Attributes["assetID"].Value, 16); Entries.Add(FileID, new PackingslipEntry <T>(this) { ID = FileID, FilePath = asset.Attributes["key"].Value.Replace('\\', '/') }); } }
/// <summary> /// Gets a file. /// </summary> /// <param name="name">The name of the file to get.</param> /// <returns>The file.</returns> public T Get(string name) { name = name.ToLowerInvariant(); lock (Cache) { if (Cache.ContainsKey(name)) { return(Cache[name]); } if (EntriesByName.ContainsKey(name)) { var fullPath = UseContent? ("Content/" + EntriesByName[name]):(UseTS1?Path.Combine(ContentManager.TS1BasePath, EntriesByName[name]):ContentManager.GetPath(EntriesByName[name])); using (var reader = File.OpenRead(fullPath)) { T item; if (Codec == null) { item = (T)SmartCodec.Decode(reader, Path.GetExtension(fullPath)); } else { item = Codec.Decode(reader); } Cache.Add(name, item); return(item); } } return(default(T)); } }
public void Init() { Cache = new TimedReferenceCache <string, T>(); EntriesByName = new Dictionary <string, Far1ProviderEntry <T> >(); EntriesOfType = new Dictionary <string, List <Far1ProviderEntry <T> > >(); if (FarFilePattern != null) { List <string> farFiles = new List <string>(); string[] allFiles = (TS1) ? ContentManager.TS1AllFiles : ContentManager.AllFiles; foreach (var file in allFiles) { if (FarFilePattern.IsMatch(file.Replace('\\', '/'))) { farFiles.Add(file); } } FarFiles = farFiles.ToArray(); } foreach (var farPath in FarFiles) { var archive = new FAR1Archive((TS1)?Path.Combine(ContentManager.TS1BasePath, farPath):ContentManager.GetPath(farPath), !TS1); var entries = archive.GetAllFarEntries(); foreach (var entry in entries) { var referenceItem = new Far1ProviderEntry <T>(this) { Archive = archive, FarEntry = entry }; if (entry.Filename != null) { EntriesByName[entry.Filename] = referenceItem; var ext = Path.GetExtension(entry.Filename).ToLowerInvariant(); if (!EntriesOfType.TryGetValue(ext, out var group)) { group = new List <Far1ProviderEntry <T> >(); EntriesOfType[ext] = group; } group.Add(referenceItem); } } } }