public override void OnRebuild(VoidPtr address, int length, bool force) { ResourceGroup *group; if (_version == 5) { SRT0v5 *header = (SRT0v5 *)address; * header = new SRT0v5((ushort)_numFrames, _loop, (ushort)Children.Count, _matrixMode); group = header->Group; } else { SRT0v4 *header = (SRT0v4 *)address; * header = new SRT0v4((ushort)_numFrames, _loop, (ushort)Children.Count, _matrixMode); group = header->Group; } *group = new ResourceGroup(Children.Count); VoidPtr entryAddress = group->EndAddress; VoidPtr dataAddress = entryAddress; foreach (SRT0EntryNode n in Children) { dataAddress += n._entryLen; } ResourceEntry *rEntry = group->First; foreach (SRT0EntryNode n in Children) { (rEntry++)->_dataOffset = (int)entryAddress - (int)group; n._dataAddr = dataAddress; n.Rebuild(entryAddress, n._entryLen, true); entryAddress += n._entryLen; dataAddress += n._dataLen; } if (_userEntries.Count > 0 && _version == 5) { SRT0v5 *header = (SRT0v5 *)address; header->UserData = dataAddress; _userEntries.Write(dataAddress); } }
protected internal override void OnRebuild(VoidPtr address, int length, bool force) { ResourceGroup *group; if (_version == 5) { SRT0v5 *header = (SRT0v5 *)address; * header = new SRT0v5((ushort)(_numFrames + ConversionBias), _loop, (ushort)Children.Count); group = header->Group; } else { SRT0v4 *header = (SRT0v4 *)address; * header = new SRT0v4((ushort)(_numFrames + ConversionBias), _loop, (ushort)Children.Count); group = header->Group; } *group = new ResourceGroup(Children.Count); VoidPtr entryAddress = group->EndAddress; VoidPtr dataAddress = entryAddress; foreach (SRT0EntryNode n in Children) { dataAddress += n._entryLen; } ResourceEntry *rEntry = group->First; foreach (SRT0EntryNode n in Children) { (rEntry++)->_dataOffset = (int)entryAddress - (int)group; n._dataAddr = dataAddress; n.Rebuild(entryAddress, n._entryLen, true); entryAddress += n._entryLen; dataAddress += n._dataLen; } }