コード例 #1
0
        /// <summary>
        /// Creates a new MT5Node instance from the given model node.
        /// </summary>
        public MT5Node(ModelNode node, MT5Node parent = null, MT5 mt5 = null)
        {
            MT5 = mt5;

            ID       = node.ID;
            Rotation = node.Rotation;
            Position = node.Position;
            Scale    = node.Scale;

            Center = node.Center;
            Radius = node.Radius;

            VertexPositions = node.VertexPositions;
            VertexNormals   = node.VertexNormals;
            VertexUVs       = node.VertexUVs;
            VertexColors    = node.VertexColors;

            Faces = node.Faces;

            MeshData = new MT5Mesh(node, this);
            if (node.Child != null)
            {
                Child = new MT5Node(node.Child, this, mt5);
            }
            if (node.Sibling != null)
            {
                Sibling = new MT5Node(node.Sibling, this, mt5);
            }
            Parent = parent;
        }
コード例 #2
0
        public void Read(BinaryReader reader, MT5Node parent)
        {
            Offset = (uint)reader.BaseStream.Position;
            Parent = parent;

            ID         = reader.ReadUInt32();
            MeshOffset = reader.ReadUInt32();

            Rotation.X = 360.0f * reader.ReadInt32() / 0xffff;
            Rotation.Y = 360.0f * reader.ReadInt32() / 0xffff;
            Rotation.Z = 360.0f * reader.ReadInt32() / 0xffff;

            Scale.X = reader.ReadSingle();
            Scale.Y = reader.ReadSingle();
            Scale.Z = reader.ReadSingle();

            Position.X = reader.ReadSingle();
            Position.Y = reader.ReadSingle();
            Position.Z = reader.ReadSingle();

            ChildOffset   = reader.ReadUInt32();
            SiblingOffset = reader.ReadUInt32();
            ParentOffset  = reader.ReadUInt32();

            ObjectName = reader.ReadUInt32();
            Unknown    = reader.ReadUInt32();

            //Console.WriteLine("Node Unknown: {0:X}", Unknown);

            //Read MT5 mesh data
            long offset = reader.BaseStream.Position;

            if (MeshOffset != 0)
            {
                HasMesh = true;
                reader.BaseStream.Seek(MeshOffset, SeekOrigin.Begin);
                MeshData = new MT5Mesh(reader, this);
            }

            //Construct node tree recursively
            if (ChildOffset != 0)
            {
                reader.BaseStream.Seek(ChildOffset, SeekOrigin.Begin);
                Child = new MT5Node(reader, this, MT5);
            }
            if (SiblingOffset != 0)
            {
                reader.BaseStream.Seek(SiblingOffset, SeekOrigin.Begin);
                Sibling = new MT5Node(reader, (MT5Node)Parent, MT5);
            }
            reader.BaseStream.Seek(offset, SeekOrigin.Begin);
        }