Пример #1
0
        public void Read()
        {
            foreach (var subChunk in Data.Chunks)
            {
                switch (subChunk.Name)
                {
                case "MOHD":
                    MOHD = new MOHD(subChunk);
                    break;

                case "MOGN":
                    MOGN = new MOGN(subChunk);
                    break;

                case "MOGI":
                    MOGI = new MOGI(subChunk);
                    break;

                case "MODD":
                    MODD = new MODD(subChunk);
                    break;

                case "MODN":
                    MODN = new MODN(subChunk);
                    break;

                case "MODS":
                    MODS = new MODS(subChunk);
                    break;
                }
            }

            ReadGroups();
        }
Пример #2
0
        public MODN[] ReadMODNChunk(BlizzHeader chunk, BinaryReader bin, uint num)
        {
            //List of M2 filenames, but are still named after MDXs internally. Have to rename!
            var           m2FilesChunk = bin.ReadBytes((int)chunk.Size);
            List <String> m2Files      = new List <string>();
            List <int>    m2Offset     = new List <int>();
            var           str          = new StringBuilder();

            for (var i = 0; i < m2FilesChunk.Length; i++)
            {
                if (m2FilesChunk[i] == '\0')
                {
                    if (str.Length > 1)
                    {
                        str.Replace("..", ".");
                        str.Replace(".mdx", ".m2");

                        m2Files.Add(str.ToString());
                        m2Offset.Add(i - str.ToString().Length);
                    }
                    str = new StringBuilder();
                }
                else
                {
                    str.Append((char)m2FilesChunk[i]);
                }
            }
            if (num != m2Files.Count)
            {
                throw new Exception("nModels does not match doodad count");
            }

            var doodadNames = new MODN[num];

            for (var i = 0; i < num; i++)
            {
                doodadNames[i].filename    = m2Files[i];
                doodadNames[i].startOffset = (uint)m2Offset[i];
            }
            return(doodadNames);
        }
Пример #3
0
        private MODN[] ReadMODNChunk(uint size, BinaryReader bin)
        {
            //List of M2 filenames, but are still named after MDXs internally. Have to rename!
            var m2FilesChunk = bin.ReadBytes((int)size);
            var m2Files      = new List <string>();
            var m2Offset     = new List <int>();
            var str          = new StringBuilder();

            for (var i = 0; i < m2FilesChunk.Length; i++)
            {
                if (m2FilesChunk[i] == '\0')
                {
                    if (str.Length > 1)
                    {
                        str.Replace("..", ".");
                        str.Replace(".mdx", ".m2");

                        m2Files.Add(str.ToString());
                        m2Offset.Add(i - str.ToString().Length);
                    }
                    str = new StringBuilder();
                }
                else
                {
                    str.Append((char)m2FilesChunk[i]);
                }
            }

            var num = m2Files.Count();

            var doodadNames = new MODN[num];

            for (var i = 0; i < num; i++)
            {
                doodadNames[i].filename    = m2Files[i];
                doodadNames[i].startOffset = (uint)m2Offset[i];
            }
            return(doodadNames);
        }