コード例 #1
0
ファイル: BRRESNode.cs プロジェクト: libertyernie/BrawlCrate
        public override void OnRebuild(VoidPtr address, int size, bool force)
        {
            BRESHeader *header = (BRESHeader *)address;

            *header = new BRESHeader(size, _numEntries + 1);

            ROOTHeader *rootHeader = header->First;

            *rootHeader = new ROOTHeader(_rootSize, Children.Count);

            ResourceGroup *pMaster = &rootHeader->_master;
            ResourceGroup *rGroup  = (ResourceGroup *)pMaster->EndAddress;

            //Write string table
            _stringTable.WriteTable(address + _strOffset);

            VoidPtr dataAddr = (VoidPtr)rootHeader + _rootSize;

            int gIndex = 1;

            foreach (BRESGroupNode g in Children)
            {
                ResourceEntry.Build(pMaster, gIndex++, rGroup, (BRESString *)_stringTable[g.Name]);

                *rGroup = new ResourceGroup(g.Children.Count);
                ResourceEntry *nEntry = rGroup->First;

                int rIndex = 1;
                foreach (BRESEntryNode n in g.Children)
                {
                    //Align data
                    dataAddr = ((int)dataAddr).Align(n.DataAlign);

                    ResourceEntry.Build(rGroup, rIndex++, dataAddr, (BRESString *)_stringTable[n.Name]);

                    //Rebuild entry
                    int len = n._calcSize;
                    n.Rebuild(dataAddr, len, force);
                    n.PostProcess(address, dataAddr, len, _stringTable);
                    dataAddr += len;
                }

                g._changed = false;

                //Advance to next group
                rGroup = (ResourceGroup *)rGroup->EndAddress;
            }

            _stringTable.Clear();
        }
コード例 #2
0
ファイル: BRES.cs プロジェクト: KingAtreyu/super-sawndz
        public ResourceEntry *GetRootEntry()
        {
            VoidPtr addr = Address;

            BRESHeader *   header = BRESHeader;
            ResourceGroup *master = &header->First->_master;

            for (int i = 0; i < master->_numEntries; i++)
            {
                ResourceGroup *group = (ResourceGroup *)master->First[i].DataAddress;
                for (int y = 0; y < group->_numEntries; y++)
                {
                    if (addr == group->First[y].DataAddress)
                    {
                        return(&group->First[y]);
                    }
                }
            }
            return(null);
        }