コード例 #1
0
            private HashSet <int> ReadSet(int byteOffset)
            {
                using (var stream = _bspFile.GetLumpStream(LumpType))
                {
                    stream.Seek(byteOffset, SeekOrigin.Begin);

                    var set = new HashSet <int>();

                    var clusters = NumClusters;
                    var offset   = 0;
                    while (offset < clusters)
                    {
                        var bits = stream.ReadByte();
                        if (bits == 0)
                        {
                            offset += stream.ReadByte() * 8;
                            continue;
                        }

                        for (var i = 0; i < 8 && offset + i < clusters; ++i)
                        {
                            if ((bits & (1 << i)) != 0)
                            {
                                set.Add(offset + i);
                            }
                        }

                        offset += 8;
                    }

                    return(set);
                }
            }
コード例 #2
0
ファイル: EntityLump.cs プロジェクト: ceckoslab/SourceUtils
            private void EnsureLoaded()
            {
                lock (this)
                {
                    if (_entities != null)
                    {
                        return;
                    }

                    _entities = new List <Entity>();

                    var keyValues = KeyValues.ListFromStream(_bspFile.GetLumpStream(LumpType));

                    foreach (var entity in keyValues)
                    {
                        var className = entity["classname"];

                        Func <Entity> ctor;
                        var           ent = _sEntityCtors.TryGetValue(className, out ctor) ? ctor() : new Entity();
                        ent.Initialize(entity);

                        _entities.Add(ent);
                    }
                }
            }
コード例 #3
0
            private void EnsureLoaded()
            {
                lock (this)
                {
                    if (_loaded)
                    {
                        return;
                    }
                    _loaded = true;

                    using (var archive = new ZipFile(_bspFile.GetLumpStream(LumpType)))
                    {
                        _entryDict.Clear();
                        for (var i = 0; i < archive.Count; ++i)
                        {
                            var entry = archive[i];
                            if (!entry.IsFile)
                            {
                                continue;
                            }
                            _entryDict.Add($"/{entry.Name}", i);
                        }
                    }
                }
            }
コード例 #4
0
            private void EnsureLoaded()
            {
                lock (this)
                {
                    if (_loaded)
                    {
                        return;
                    }
                    _loaded = true;

                    _bspFile.Disposing += _ => Dispose();

                    if (DebugContents)
                    {
                        using (var stream = _bspFile.GetLumpStream(LumpType))
                        {
                            var bytes = new byte[stream.Length];
                            stream.Read(bytes, 0, bytes.Length);
                            File.WriteAllBytes($"{_bspFile.Name}.pakfile.zip", bytes);
                        }
                    }

                    using (var archive = new ZipFile(_bspFile.GetLumpStream(LumpType)))
                    {
                        _entryDict.Clear();
                        for (var i = 0; i < archive.Count; ++i)
                        {
                            var entry = archive[i];
                            var path  = $"/{entry.Name.Replace( '\\', '/' )}";
                            if (!entry.IsFile || _entryDict.ContainsKey(path))
                            {
                                continue;
                            }
                            _entryDict.Add(path, i);
                        }
                    }
                }
            }
コード例 #5
0
            private void EnsureLoaded()
            {
                lock (this)
                {
                    if (_loaded)
                    {
                        return;
                    }
                    _loaded = true;

                    _bspFile.Disposing += _ => Dispose();

                    if (DebugContents)
                    {
                        using (var stream = _bspFile.GetLumpStream(LumpType))
                        {
                            var bytes = new byte[stream.Length];
                            stream.Read(bytes, 0, bytes.Length);
                            File.WriteAllBytes($"{_bspFile.Name}.pakfile.zip", bytes);
                        }
                    }

                    using (var stream = _bspFile.GetLumpStream(LumpType))
                    {
                        using (var extractor = new SevenZipExtractor(stream))
                        {
                            _entryDict.Clear();
                            for (var i = 0; i < extractor.FilesCount; ++i)
                            {
                                var entryName = extractor.ArchiveFileNames[i];
                                var path      = $"/{entryName.Replace( '\\', '/' )}";
                                _entryDict.Add(path, i);
                            }
                        }
                    }
                }
            }
コード例 #6
0
ファイル: GameLump.cs プロジェクト: yigitnerukuc/SourceUtils
            private void EnsureLoaded()
            {
                lock (this)
                {
                    if (_items != null)
                    {
                        return;
                    }

                    _items = new Dictionary <string, Item>();

                    using (var reader = new BinaryReader(_bspFile.GetLumpStream(LumpType)))
                    {
                        var count = reader.ReadInt32();
                        LumpReader <Item> .ReadLumpFromStream(reader.BaseStream, count, item => _items.Add(GetIdString(item.Id), item));
                    }
                }
            }
コード例 #7
0
            private void EnsureLoaded()
            {
                lock (this)
                {
                    if (_entities != null)
                    {
                        return;
                    }

                    _entities = new List <Entity>();

                    var propBuffer = new List <KeyValuePair <string, string> >();

                    using (var reader = new StreamReader(_bspFile.GetLumpStream(LumpType)))
                    {
                        string line;
                        while ((line = reader.ReadLine()) != null)
                        {
                            if (line != "{")
                            {
                                continue;
                            }

                            string className;

                            propBuffer.Clear();
                            ReadPropertyGroup(reader, propBuffer, out className);

                            Func <Entity> ctor;
                            var           ent = _sEntityCtors.TryGetValue(className, out ctor) ? ctor() : new Entity();
                            ent.Initialize(propBuffer);

                            _entities.Add(ent);
                        }
                    }
                }
            }