Пример #1
0
        private void ReadTagReference(DataBlock block, uint offset, bool withClass)
        {
            SeekToOffset(block, offset);

            DatumIndex index;
            int        fixupOffset;
            bool       valid;

            if (withClass)
            {
                // Class info - do a flexible structure read to get the index
                StructureValueCollection values = StructureReader.ReadStructure(_reader, _tagRefLayout);
                var classMagic = (int)values.GetInteger("class magic");
                index       = new DatumIndex(values.GetInteger("datum index"));
                fixupOffset = (int)offset + _tagRefLayout.GetFieldOffset("datum index");
                valid       = _cacheFile.Tags.IsValidIndex(index, classMagic);
            }
            else
            {
                // No tag class - the datum index is at the offset
                index       = new DatumIndex(_reader.ReadUInt32());
                fixupOffset = (int)offset;
                valid       = _cacheFile.Tags.IsValidIndex(index);
            }

            if (valid)
            {
                // Add the tagref fixup to the block
                var fixup = new DataBlockTagFixup(index, fixupOffset);
                block.TagFixups.Add(fixup);
                ReferencedTags.Add(index);
            }
        }
Пример #2
0
 public int GetReferencedTag(GameTag gameTag) => ReferencedTags.FirstOrDefault(x => x.EnumId == (int)gameTag)?.Value ?? 0;