public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            curDataOffset = (uint)(Header->_headerSize + Children.Count * PathingMiscDataEntry.Size);
            uint             headerSize = Header->_headerSize;
            PathingMiscData *header     = (PathingMiscData *)address;

            *header = new PathingMiscData();
            header->_count      = (uint)Children.Count;
            header->_headerSize = headerSize;
            header->_minX       = MinX;
            header->_minY       = MinY;
            header->_minZ       = MinZ;
            header->_maxX       = MaxX;
            header->_maxY       = MaxY;
            header->_maxZ       = MaxZ;
            uint offset = headerSize;

            ResourceNode[] validChildren = Children.Where(n => n.HasChildren).ToArray();
            foreach (ResourceNode n in validChildren)
            {
                int size = n.CalculateSize(true);
                n.Rebuild(address + offset, size, true);
                offset += (uint)size;
            }

            foreach (ResourceNode n in validChildren)
            {
                foreach (ResourceNode c in n.Children)
                {
                    int size = c.CalculateSize(true);
                    c.Rebuild(address + offset, size, true);
                    offset += (uint)size;
                }
            }
        }
        internal static ResourceNode TryParse(DataSource source, ResourceNode parent)
        {
            PathingMiscData *p         = (PathingMiscData *)source.Address;
            uint             sizeCheck = PathingMiscData.HeaderSize + PathingMiscDataEntry.Size * p->_count;

            if (p->_headerSize == PathingMiscData.HeaderSize && source.Length > sizeCheck)
            {
                for (int i = 0; i < p->_count; i++)
                {
                    PathingMiscDataEntry *pe = (PathingMiscDataEntry *)(*p)[i];
                    sizeCheck += PathingMiscDataSubEntry.Size * pe->_count;
                    if (sizeCheck > source.Length)
                    {
                        return(null);
                    }
                }

                return(sizeCheck == source.Length ? new PathingMiscDataNode() : null);
            }

            return(null);
        }