コード例 #1
0
ファイル: FAR3Provider.cs プロジェクト: HarryFreeMyLand/newso
        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;
                        }
                    }
                }
            }
        }
コード例 #2
0
        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('\\', '/')
                });
            }
        }
コード例 #3
0
        /// <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));
            }
        }
コード例 #4
0
ファイル: FAR1Provider.cs プロジェクト: HarryFreeMyLand/newso
        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);
                    }
                }
            }
        }