コード例 #1
0
ファイル: GCTNode.cs プロジェクト: 0000duck/brawltools
 public GCTCodeEntryNode(GCTCodeEntry *entry)
 {
     _name = entry->CodeName;
     if (entry->_descOffset > 0)
     {
         _description = entry->CodeDesc;
     }
     _lines = new GCTCodeLine[entry->_lineCount];
 }
コード例 #2
0
ファイル: GCTNode.cs プロジェクト: 0000duck/brawltools
        public override void OnPopulate()
        {
            GCTCodeEntry *entry = (GCTCodeEntry *)(_header + 1);

            for (int i = 0; i < _header->_count; i++)
            {
                new GCTCodeEntryNode(&entry[i]).Initialize(this, Data + entry[i]._codeOffset, (int)entry[i]._lineCount * GCTCodeLine.Size);
            }
        }
コード例 #3
0
        public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            List <GCTCodeEntryNode> enabledChildren = Children.Select(e => ((GCTCodeEntryNode)e)).Where(e => e._enabled).ToList();

            GCTCodeLine *line = (GCTCodeLine *)address;

            *line++ = GCTCodeLine.Tag;
            foreach (GCTCodeEntryNode n in enabledChildren)
            {
                foreach (GCTCodeLine l in n._lines)
                {
                    *line++ = l;
                }
            }
            *line++ = GCTCodeLine.End;
            if (_writeInfo)
            {
                GCTHeader *hdr = (GCTHeader *)line;
                hdr->_count = (uint)enabledChildren.Count;

                int offset = 12 + enabledChildren.Count * 16;
                _stringTable.WriteTable((VoidPtr)hdr + offset);

                hdr->_idOffset = (uint)_stringTable[_name] - (uint)hdr;
                if (!String.IsNullOrEmpty(_gameName))
                {
                    hdr->_nameOffset = (uint)_stringTable[_gameName] - (uint)hdr;
                }
                else
                {
                    hdr->_nameOffset = 0;
                }

                GCTCodeEntry *entry      = (GCTCodeEntry *)(hdr + 1);
                uint          codeOffset = 8;
                foreach (GCTCodeEntryNode n in enabledChildren)
                {
                    entry->_codeOffset = codeOffset;
                    codeOffset        += (uint)n._lines.Length * 8;

                    entry->_lineCount  = (uint)n._lines.Length;
                    entry->_nameOffset = (uint)_stringTable[n._name] - (uint)entry;
                    if (!String.IsNullOrEmpty(n._description))
                    {
                        entry->_descOffset = (uint)_stringTable[n._description] - (uint)entry;
                    }
                    else
                    {
                        entry->_descOffset = 0;
                    }
                    entry++;
                }
            }
        }