protected override int OnCalculateSize(bool force) { entrySize = 12; id = 1; table = new U8StringTable(); table._table.Add("", 0); int childSize = 0; foreach (ResourceNode e in Children) { childSize += GetSize(e, force); } entryLength = (table.TotalSize + entrySize); return(0x20 + childSize + entryLength.Align(0x20)); }
public void RebuildNode(VoidPtr header, U8EntryNode node, ref U8Entry *entry, VoidPtr sTableStart, ref VoidPtr dataAddr, U8StringTable sTable, bool force) { entry->_type = (byte)((node is U8FolderNode) ? 1 : 0); entry->_stringOffset.Value = (int)sTable[node.Name] - (int)sTableStart; if (entry->_type == 1) { if (node.Parent != this && node.Parent != null) { entry->_dataOffset = (uint)(node.Parent as U8EntryNode).index; } (entry++)->_dataLength = (uint)(node.index + node.Children.Count + 1); foreach (ResourceNode b in node.Children) { if (b is U8EntryNode) { RebuildNode(header, b as U8EntryNode, ref entry, sTableStart, ref dataAddr, table, force); } } } else { node.Rebuild(dataAddr, node._calcSize, force); entry->_dataOffset = (uint)dataAddr - (uint)header; (entry++)->_dataLength = (uint)node._calcSize.Align(0x10); dataAddr += node._calcSize.Align(0x20); } }