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