private void LoadRegions(ITag modelTag, BlamCacheFile blamCacheFile) { IReader reader = blamCacheFile.Reader; StructureLayout renderModelLayout = blamCacheFile.GetLayout("render model"); reader.SeekTo(modelTag.MetaLocation.AsOffset()); renderModelValues = StructureReader.ReadStructure(blamCacheFile.Reader, renderModelLayout); ulong numRegions = renderModelValues.GetInteger("number of regions"); ulong regionTableAddress = renderModelValues.GetInteger("region table address"); long expandedRegionTableOffset = blamCacheFile.PointerToFileOffset((uint)regionTableAddress); StructureLayout modelRegionLayout = blamCacheFile.GetLayout("model region"); ResourceDatumIndex = new DatumIndex(renderModelValues.GetInteger("resource datum index")); Regions = new List <BlamRenderModelRegion>(); var x = blamCacheFile.Get().Resources.LoadResourceTable(blamCacheFile.Reader).Resources[ResourceDatumIndex.Index]; for (ulong regionNum = 0ul; regionNum < numRegions; regionNum++) { long regionPointer = expandedRegionTableOffset + (long)((ulong)modelRegionLayout.Size * regionNum); Regions.Add(new BlamRenderModelRegion(regionPointer, blamCacheFile)); } }
public BlamRenderModelPermutation(long addr, BlamCacheFile blamCacheFile, StructureLayout permutationLayout) { blamCacheFile.Reader.SeekTo(addr); StructureValueCollection values = StructureReader.ReadStructure(blamCacheFile.Reader, permutationLayout); Name = blamCacheFile.Get().StringIDs.GetString(new StringID(values.GetInteger("name stringid"))); ModelSection = (Int16)(values.GetInteger("model section")); ModelCount = (Int16)(values.GetInteger("model count")); }
public BlamRenderModelRegion(long addr, BlamCacheFile blamCacheFile) { Permutations = new List <BlamRenderModelPermutation>(); StructureLayout regionLayout = blamCacheFile.GetLayout("model region"); StructureLayout permutationLayout = blamCacheFile.GetLayout("model permutation"); blamCacheFile.Reader.SeekTo(addr); StructureValueCollection values = StructureReader.ReadStructure(blamCacheFile.Reader, regionLayout); Name = blamCacheFile.Get().StringIDs.GetString(new StringID(values.GetInteger("name stringid"))); ulong numPermutations = values.GetInteger("number of permutations"); long permutationTableAddress = blamCacheFile.ExpandPointer((uint)values.GetInteger("permutation table address")); long permutationRegionTableOffset = blamCacheFile.Get().MetaArea.PointerToOffset(permutationTableAddress); for (ulong permutationNum = 0; permutationNum < numPermutations; permutationNum++) { long permutationAddr = permutationRegionTableOffset + (long)((ulong)permutationLayout.Size * permutationNum); Permutations.Add(new BlamRenderModelPermutation(permutationAddr, blamCacheFile, permutationLayout)); } }