internal void SetNameValues(BinaryDataTreeDecompiler decompiler, BinaryDataTreePackedNode packedNode, int numNameValues)
        {
            NameValues = new List <BinaryDataTreeBuildNameValue>(numNameValues);
            for (int y = 0; y < numNameValues; y++)
            {
                NameValues.Add(new BinaryDataTreeBuildNameValue());
            }

            for (int x = 0; x < NameValues.Count; x++)
            {
                int packed_name_value_index = packedNode.NameValueOffset + x;
                var packed_name_value       = decompiler.NameValues[packed_name_value_index];
                var build_name_value        = NameValues[x];

                if (x == (NameValues.Count - 1))
                {
                    if (!packed_name_value.IsLastNameValue)
                    {
                        throw new InvalidDataException("Expected IsLastNameValue");
                    }
                }

                build_name_value.Name = decompiler.ReadName(packed_name_value.NameOffset);
                build_name_value.Variant.Read(decompiler.ValueDataPool, packed_name_value);

                if (packed_name_value.HasUnicodeData)
                {
                    decompiler.HasUnicodeStrings = true;
                }
            }
        }
 internal void SetChildren(BinaryDataTreeDecompiler decompiler, BinaryDataTreePackedNode packedNode, int numChildNodes)
 {
     Children = new List <BinaryDataTreeBuildNode>(numChildNodes);
     for (int x = 0; x < numChildNodes; x++)
     {
         Children.Add(decompiler.Nodes[packedNode.ChildNodeIndex + x]);
     }
 }
 internal void SetParent(BinaryDataTreeDecompiler decompiler, BinaryDataTreePackedNode packedNode)
 {
     if (packedNode.IsRootNode)
     {
         decompiler.RootNode = this;
         Parent = null;
     }
     else
     {
         Parent = decompiler.Nodes[packedNode.ParentIndex];
     }
 }