Editor/RbxlReader/Chunks/ChunkInfo/PRNT.cs
using RbxlReader.Chunks;
using RbxlReader.Instances;
public class PRNT : IChunkInfo {
public BinaryChunkData Raw {get; set;}
public byte Version {get; protected set;}
public int InstanceCount {get; protected set;}
/// <summary>
/// Where key - child instance ID, value - parent instance ID
/// </summary>
public Dictionary<int, int> ChildParentIds = new();
public PRNT(BinaryChunkData raw, bool loadNow = true) {
Raw = raw;
if (!loadNow) return;
using (MemoryStream stream = new(raw.Data)) {
Load(new RbxlBinaryReader(stream));
}
}
public void Load(RbxlBinaryReader reader) {
Version = reader.ReadByte();
InstanceCount = reader.ReadInt32();
List<int> childIds = reader.ReadInstanceIds(InstanceCount);
List<int> parentIds = reader.ReadInstanceIds(InstanceCount);
ChildParentIds = new(InstanceCount);
for (int i = 0; i < InstanceCount; i++) {
Instance child = Raw.Rbxl.IdToInstance[childIds[i]];
Instance parent;
if (parentIds[i] == -1) {
//null parent (parent is root)
parent = Raw.Rbxl.Root;
} else {
parent = Raw.Rbxl.IdToInstance[parentIds[i]];
}
ChildParentIds.Add(childIds[i], parentIds[i]);
parent.AddChild(child);
}
}
}