Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
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;
            }
        }