Ejemplo n.º 1
0
        /// <summary>
        /// Reads header from binary reader and returns it.
        /// </summary>
        /// <param name="br"></param>
        /// <returns></returns>
        public static PmgHeader ReadFrom(BinaryReader br)
        {
            var result = new PmgHeader();

            result.Signature = br.ReadString(4);
            if (result.Signature != "pmg")
            {
                throw new InvalidDataException("Expected 'pmg' signature.");
            }

            result.Version    = FormatVersion.ReadFrom(br);
            result.HeaderSize = br.ReadInt32();
            result.Name       = br.ReadString(32);
            result.Unk1       = br.ReadBytes(96);

            var meshGroupCount = br.ReadInt32();

            for (var i = 0; i < meshGroupCount; ++i)
            {
                var meshGroup = MeshGroup.ReadFrom(br);
                result.MeshGroups.Add(meshGroup);
            }

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Reads a PMG from the given stream and returns it.
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public static PmgFile ReadFrom(Stream stream)
        {
            var result = new PmgFile();
            var br     = new BinaryReader(stream);

            result.Header = PmgHeader.ReadFrom(br);

            foreach (var group in result.Header.MeshGroups)
            {
                for (var i = 0; i < group.MeshCount; ++i)
                {
                    var mesh = Mesh.ReadFrom(br);
                    result.Meshes.Add(mesh);
                }
            }

            if (stream.Position != stream.Length)
            {
                throw new InvalidDataException("Leftover data in PMG.");
            }

            return(result);
        }