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); } }
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); } } }
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); } } } }
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); } } } }
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); } } } } }
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)); } } }
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); } } } }