private void refreshReflexiveListRecursive(reflexiveData parentReflexive, int metaOffset)
{
foreach (reflexiveData rd in parentReflexive.children)
{
// If parent reflexive is 0 count, make sure to 0 count all children as well
if (parentReflexive.baseOffset >= 0)
{
map.BR.BaseStream.Position = rd.reflexive.offset + metaOffset;
rd.chunkCount = map.BR.ReadInt32();
}
else
{
rd.chunkCount = 0;
}
// If reflexive has a count
if (rd.chunkCount > 0)
{
rd.chunkSelected = 0;
rd.baseOffset = map.BR.ReadInt32() - meta.magic;
// Some listings are actually in other tags!
// Check [BLOC] "objects\\vehicles\\wraith\\garbage\\wing_boost\\wing_boost"
// > attachments[0] = [BLOC] "objects\\vehicles\\ghost\\garbage\\seat\\seat"
rd.inTagNumber = map.Functions.ForMeta.FindMetaByOffset(rd.baseOffset);
if (rd.inTagNumber == -1)
{
rd.chunkCount = 0;
rd.chunkSelected = -1;
continue;
}
if (rd.inTagNumber == meta.TagIndex)
rd.baseOffset -= meta.offset;
}
else
{
rd.chunkSelected = -1;
rd.baseOffset = -1;
rd.inTagNumber = -1;
}
if (rd.inTagNumber == meta.TagIndex)
refreshReflexiveListRecursive(rd, meta.offset + rd.baseOffset + rd.chunkSelected * rd.reflexive.chunkSize);
else
refreshReflexiveListRecursive(rd, rd.baseOffset + rd.chunkSelected * rd.reflexive.chunkSize);
}
}