private void SaveTree(BinaryWriter writer, ChunkLink.LinkTree node) { writer.Write(node.Header); writer.Write(node.GI_Type.Header); writer.Write(node.GI_Type.unkBlob.Length + 320); for (int j = 0; j < node.LoadArea.Length; ++j) { writer.Write(node.LoadArea[j].X); writer.Write(node.LoadArea[j].Y); writer.Write(node.LoadArea[j].Z); writer.Write(node.LoadArea[j].W); } for (int j = 0; j < node.AreaMatrix.Length; ++j) { writer.Write(node.AreaMatrix[j].X); writer.Write(node.AreaMatrix[j].Y); writer.Write(node.AreaMatrix[j].Z); writer.Write(node.AreaMatrix[j].W); } for (int j = 0; j < node.UnknownMatrix.Length; ++j) { writer.Write(node.UnknownMatrix[j].X); writer.Write(node.UnknownMatrix[j].Y); writer.Write(node.UnknownMatrix[j].Z); writer.Write(node.UnknownMatrix[j].W); } writer.Write(node.GI_Type.unkBlob); if (node.Ptr != null) { SaveTree(writer, (ChunkLink.LinkTree)node.Ptr); } }
private void CountTree(ChunkLink.LinkTree ptr, ref int size) { size += 350 + ptr.GI_Type.unkBlob.Length; if (ptr.Ptr != null) { CountTree((ChunkLink.LinkTree)ptr.Ptr, ref size); } }
private void CountTree(ChunkLink.LinkTree ptr, ref int size) { size += 350 + ptr.GI_Type.collisionDataBlob.Length; if (ptr.Next != null) { CountTree(ptr.Next, ref size); } }
private ChunkLink.LinkTree ReadTree(BinaryReader reader, int Head) { if ((Head & 0x1) == 0) { return(null); } ChunkLink.LinkTree Node = new ChunkLink.LinkTree { Header = reader.ReadInt32() }; ushort[] header = new ushort[11]; for (var i = 0; i < 11; ++i) { header[i] = reader.ReadUInt16(); } int blobSize = reader.ReadInt32(); for (int j = 0; j < 8; ++j) { Node.LoadArea[j] = new Pos(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } for (int j = 0; j < 6; ++j) { Node.AreaMatrix[j] = new Pos(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } for (int j = 0; j < 6; ++j) { Node.UnknownMatrix[j] = new Pos(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } byte[] Blob = reader.ReadBytes(blobSize - 320); Node.GI_Type = new GraphicsInfo.GI_CollisionData() { Header = header, collisionDataBlob = Blob }; Node.Next = ReadTree(reader, Node.Header); return(Node); }
private ChunkLink.LinkTree?ReadTree(BinaryReader reader, int Head) { if ((Head & 0x1) == 0) { return(null); } ChunkLink.LinkTree Node = new ChunkLink.LinkTree(); Node.Header = reader.ReadInt32(); byte[] Header = reader.ReadBytes(0x16); int blobSize = reader.ReadInt32(); Node.LoadArea = new Pos[8]; Node.AreaMatrix = new Pos[6]; Node.UnknownMatrix = new Pos[6]; for (int j = 0; j < 8; ++j) { Node.LoadArea[j] = new Pos(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } for (int j = 0; j < 6; ++j) { Node.AreaMatrix[j] = new Pos(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } for (int j = 0; j < 6; ++j) { Node.UnknownMatrix[j] = new Pos(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } byte[] Blob = reader.ReadBytes(blobSize - 320); Node.GI_Type = new GraphicsInfo.GI_Type4() { Header = Header, unkBlob = Blob }; Node.Ptr = ReadTree(reader, Node.Header); return(Node); }
private void SaveTree(BinaryWriter writer, ChunkLink.LinkTree node) { writer.Write(node.Header); for (var i = 0; i < 11; ++i) { writer.Write(node.GI_Type.Header[i]); } writer.Write(node.GI_Type.collisionDataBlob.Length + 320); for (int j = 0; j < node.LoadArea.Length; ++j) { writer.Write(node.LoadArea[j].X); writer.Write(node.LoadArea[j].Y); writer.Write(node.LoadArea[j].Z); writer.Write(node.LoadArea[j].W); } for (int j = 0; j < node.AreaMatrix.Length; ++j) { writer.Write(node.AreaMatrix[j].X); writer.Write(node.AreaMatrix[j].Y); writer.Write(node.AreaMatrix[j].Z); writer.Write(node.AreaMatrix[j].W); } for (int j = 0; j < node.UnknownMatrix.Length; ++j) { writer.Write(node.UnknownMatrix[j].X); writer.Write(node.UnknownMatrix[j].Y); writer.Write(node.UnknownMatrix[j].Z); writer.Write(node.UnknownMatrix[j].W); } writer.Write(node.GI_Type.collisionDataBlob); if (node.Next != null) { SaveTree(writer, node.Next); } }