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); } }
public override bool OnInitialize() { base.OnInitialize(); if (_version == 5) { SRT0v5 *header = Header5; if ((_name == null) && (header->_stringOffset != 0)) { _name = header->ResourceString; } _loop = header->_loop != 0; _numFrames = header->_numFrames; _matrixMode = header->_matrixMode; if (header->_origPathOffset > 0) { _originalPath = header->OrigPath; } (_userEntries = new UserDataCollection()).Read(header->UserData); return(header->Group->_numEntries > 0); } else { SRT0v4 *header = Header4; if ((_name == null) && (header->_stringOffset != 0)) { _name = header->ResourceString; } _loop = header->_loop != 0; _numFrames = header->_numFrames; _matrixMode = header->_matrixMode; if (header->_origPathOffset > 0) { _originalPath = header->OrigPath; } return(header->Group->_numEntries > 0); } }
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; } }