예제 #1
0
        /// <summary>
        /// Digs through an ADT and parses out all the information in it.
        /// </summary>
        public override ADT.ADT Parse()
        {
            var adt = new ADT.ADT();

            var mver = new MVERChunkParser(Reader, 0).Parse();

            adt.Version = mver;

            var mhdr = new MHDRChunkParser(Reader, Reader.BaseStream.Position).Parse();

            var mcins = new MCINChunkParser(Reader, mhdr.OffsInfo + mhdr.Base).Parse();

            var mcnk = new MCNKChunkParser(Reader, mcins[0].Offset, mcins).Parse();

            adt.MCNKArray = mcnk;

            var mwmos = new StringArrayChunkParser("MWMO", Reader, mhdr.OffsMapObejcts + mhdr.Base).Parse();

            adt.MODFList = new MODFChunkParser(Reader, mhdr.OffsObjectsDef + mhdr.Base, mwmos).Parse();

            var mmdxs = new StringArrayChunkParser("MMDX", Reader, mhdr.OffsModels + mhdr.Base).Parse();

            adt.MDDFList = new MDDFChunkParser(Reader, mhdr.OffsDoodsDef + mhdr.Base, mmdxs).Parse();

            var mh2os = mhdr.OffsMH2O != 0 ? new MH2OChunkParser(Reader, mhdr.OffsMH2O + mhdr.Base).Parse() : null;

            adt.MH2OArray = mh2os;

            return(adt);
        }
예제 #2
0
파일: WmoLoader.cs 프로젝트: hazzik/mpqnav
        /// <summary> Loads WMO from file </summary>
        /// <param name="fileName">Full name of file of the WMO</param>
        /// <returns>Loaded WMO</returns>
        private static Model LoadWMO(string fileName)
        {
            var  path = fileName;
            MOHD mohd;
            var  fileInfo = FileInfoFactory.Create();

            if (fileInfo.Exists(path) == false)
            {
                throw new Exception(String.Format("File does not exist: {0}", path));
            }

            using (var br = new BinaryReader(fileInfo.OpenRead(path)))
            {
                int version = new MVERChunkParser(br, br.BaseStream.Position).Parse();
                mohd = new MOHDChunkParser(br, br.BaseStream.Position).Parse();
            }

            var list = new TriangleListCollection();

            for (int wmoGroup = 0; wmoGroup < mohd.GroupsCount; wmoGroup++)
            {
                list.Add(LoadWMOSub(String.Format("{0}_{1:D3}.wmo", fileName.Substring(0, fileName.Length - 4), wmoGroup)));
            }

            return(new Model(list));
        }
예제 #3
0
        /// <summary> Loads WMO from file </summary>
        /// <param name="fileName">Full name of file of the WMO</param>
        /// <returns>Loaded WMO</returns>
        private static Model LoadWMO(string fileName)
        {
            var path = fileName;
            MOHD mohd;
            var fileInfo = FileInfoFactory.Create();
            if (fileInfo.Exists(path) == false)
                throw new Exception(String.Format("File does not exist: {0}", path));

            using (var br = new BinaryReader(fileInfo.OpenRead(path)))
            {
                int version = new MVERChunkParser(br, br.BaseStream.Position).Parse();
                mohd = new MOHDChunkParser(br, br.BaseStream.Position).Parse();
            }

            var list = new TriangleListCollection();
            for (int wmoGroup = 0; wmoGroup < mohd.GroupsCount; wmoGroup++)
            {
                list.Add(LoadWMOSub(String.Format("{0}_{1:D3}.wmo", fileName.Substring(0, fileName.Length - 4), wmoGroup)));
            }

            return new Model(list);
        }