예제 #1
0
        public CacheFile(GameCache cacheContext, FileInfo file, CacheVersion version, bool memory)
        {
            CacheContext = cacheContext;
            File         = file;
            Version      = version;
            Deserializer = new TagDeserializer(Version);

            Stream = memory ? new MemoryStream() : (Stream)file.OpenRead();

            if (memory)
            {
                using (var fileStream = file.OpenRead())
                {
                    fileStream.Seek(0, SeekOrigin.Begin);
                    fileStream.CopyTo(Stream);
                }
            }

            Reader = new EndianReader(Stream, EndianFormat.LittleEndian);

            Reader.SeekTo(0);
            if (Reader.ReadTag() == "daeh")
            {
                Reader.Format = EndianFormat.BigEndian;
            }

            Reader.SeekTo(0);
            Header = Deserializer.Deserialize <CacheFileHeader>(new DataSerializationContext(Reader));
        }
예제 #2
0
        public CacheFileGen2(GameCache cacheContext, FileInfo file, CacheVersion version, bool memory) :
            base(cacheContext, file, version, memory)
        {
            if (file.Name == "mainmenu.map" && MainMenuCache?.File.FullName != file.FullName)
            {
                MainMenuCache = this;
            }
            else if (file.Name == "shared.map" && SharedCache?.File.FullName != file.FullName)
            {
                SharedCache = this;
            }
            else if (file.Name == "single_player_shared.map" && SharedCache?.File.FullName != file.FullName)
            {
                SinglePlayerSharedCache = this;
            }

            IndexHeader  = new CacheIndexHeader(this);
            IndexItems   = new IndexTable(this);
            Strings      = new StringTable(this);
            LocaleTables = new List <LocaleTable>();
        }