コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
            }
        }