/// <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; }
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); }