Example #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);
            }
        }
Example #2
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;
            }
        }