protected override void _Read(BinaryReader reader) { Buffer = reader.ReadBytes((int)reader.BaseStream.Length); reader.BaseStream.Seek(0, SeekOrigin.Begin); Identifier = reader.ReadUInt32(); if (!IsValid(Identifier)) { return; } TextureOffset = reader.ReadUInt32(); FirstNodeOffset = reader.ReadUInt32(); if (TextureOffset != 0) { reader.BaseStream.Seek(TextureOffset, SeekOrigin.Begin); TEXD textureDatabase = new TEXD(reader); //Populate base class textures foreach (Texture tex in textureDatabase.Textures) { Textures.Add(tex); } } reader.BaseStream.Seek(FirstNodeOffset, SeekOrigin.Begin); RootNode = new MT5Node(reader, null, this); //Resolve the textures in the faces RootNode.ResolveFaceTextures(Textures); }
protected override void _Write(BinaryWriter writer) { long baseOffset = writer.BaseStream.Position; //Write some header stuff writer.Write(Identifier); writer.Write(TextureOffset); //Will be overwritten later writer.Write(FirstNodeOffset); //Will be overwritten later //Write MT5Nodes foreach (ModelNode node in RootNode.GetAllNodes()) { MT5Node mt5Node = (MT5Node)node; if (mt5Node.MeshData == null) { continue; } mt5Node.WriteMeshData(writer); } foreach (ModelNode node in RootNode.GetAllNodes()) { MT5Node mt5Node = (MT5Node)node; if (mt5Node.MeshData == null) { continue; } mt5Node.WriteMeshHeader(writer); } FirstNodeOffset = (uint)writer.BaseStream.Position; MT5Node rootNode = (MT5Node)RootNode; rootNode.WriteNode(writer, 0); //Write TEXD TextureOffset = (uint)writer.BaseStream.Position; TEXD texd = new TEXD(Textures); texd.Write(writer); writer.BaseStream.Seek(baseOffset + 4, SeekOrigin.Begin); writer.Write(TextureOffset); writer.Write(FirstNodeOffset); }