Example #1
0
        public static void Main(string[] args)
        {
            /*
            Console.WriteLine("Koward M2 converter prealpha");
            Console.WriteLine("YOU ARE ABOUT TO HACK TIME. ARE YOU SURE? >YES");
            if (args.Length < 1)
            {
                Console.WriteLine("No model was specified.");
                return;
            }
            var model = new M2();
            using (var reader = new BinaryReader(new FileStream(args[0], FileMode.Open)))
                model.Load(reader);
            Debug.WriteLine(model.Name + " loaded.");
            using (var writer = new BinaryWriter(new FileStream(args[0], FileMode.Create)))
                model.Save(writer, M2.Format.Classic);
            Debug.WriteLine(model.Name + " converted.");
            */
            Debug.WriteLine("Debug application for M2Lib");
            const string fileName = "draenor/world/arttest/boxtest/xyz.m2";
            //const string fileName = "draenor/world/generic/activedoodads/chest01/chest01.m2";
            //const string fileName = "lichking/world/arttest/boxtest/xyz.m2";
            //const string fileName = "Draenor/Character/Human/Male/HumanMale_HD.m2";
            //const string fileName = "Draenor/Creature/Frog/Frog.m2";
            //const string fileName = "Legion/Character/Naga_/Male/Naga_Male.m2";
            //const string fileName2 = "Output/Naga_Male.m2";
            //const string fileName2 = "Output/Frog.m2";
            //const string fileName = "BurningCrusade/FrogGenuine.m2";
            //const string fileName = "Legion/Creature/Bear2/Bear2.m2";
            //const string fileName2 = "Output/Bear2CSharp.m2";
            //const string fileName = "Classic/BogBeast.m2";
            //const string fileName = "Legion/Interface/Glues/Models/ui_orc/ui_orc.m2";
            //const string fileName2 = "Output/ui_orc.m2";
            var model = new M2();
            using (var reader = new BinaryReader(new FileStream(fileName, FileMode.Open)))
                model.Load(reader);
            Debug.WriteLine(model.Name + " loaded");
            Debug.WriteLine(model.BoneLookup);
            Debug.WriteLine(model.Views);
            /*
            foreach (var view in model.Views)
            {
                var goodSubmeshes = new List<M2SkinSection>();
                foreach (var geoset in view.Submeshes)
                {
                    if(geoset.SubmeshId == 0 || geoset.SubmeshId == 401) goodSubmeshes.Add(geoset);
                }
                view.Submeshes.Clear();
                view.Submeshes.AddRange(goodSubmeshes);
            }
            */
            /*
            using (var writer = new BinaryWriter(new FileStream(fileName2, FileMode.Create)))
                model.Save(writer, M2.Format.Classic);
            Debug.WriteLine(model.Name + " written.");

            /*
            Debug.WriteLine("Submeshes number : " + model.Views[0].Submeshes.Count);
            Debug.WriteLine("BoneInfluences : " + model.Views[0].Submeshes[0].BoneInfluences);
            //KOWARD method
            var max = 0;
            const int submeshNumber = 1;
            for (var i = model.Views[0].Submeshes[submeshNumber].StartVertex;
                i < model.Views[0].Submeshes[submeshNumber].StartVertex + model.Views[0].Submeshes[submeshNumber].NVertices;
                i++)
            {
                var vertex = model.GlobalVertexList[model.Views[0].Indices[i]];
                var localMax = 0;
                for(var j = 0; j < vertex.BoneWeights.Length; j++)
                {
                    var weight = vertex.BoneWeights[j];
                    Debug.Write(" "+weight+" ");
                    var relatedBone = model.Bones[model.BoneLookup[vertex.BoneIndices[j]]];
                    if (weight > 0 && relatedBone.Flags.HasFlag(M2Bone.BoneFlags.Transformed)) localMax++;
                }
                if (localMax > max) max = localMax;
                Debug.WriteLine("");
            }
            Debug.WriteLine("\tComputed number : " + max);
            /*
            //DEAMON method
            Debug.WriteLine("Method 2 (Deamon)");
                var boneSet = new HashSet<M2Bone>();
                for (var i = model.Views[0].Submeshes[0].StartVertex;
                    i < model.Views[0].Submeshes[0].StartVertex + model.Views[0].Submeshes[0].NVertices;
                    i++)
                {
                    var vertex = model.GlobalVertexList[model.Views[0].Indices[i]];
                    foreach (var index in vertex.BoneIndices)
                    {
                        Debug.Assert(model.Bones.Count > index);
                        if ((!boneSet.Contains(model.Bones[index])) && (model.Bones[index].KeyBoneId != (M2Bone.KeyBone) (-1))) boneSet.Add(model.Bones[index]);
                    }
                }
                Debug.WriteLine("\tNumber : " + boneSet.Count);
            /*
            /*
            BinaryReader stream = null;
            Func<BinaryReader, C3Vector> testFunc = i => i.ReadC3Vector();
            var result = testFunc(stream);
            */
            /*
            using (var writer = new StreamWriter("Test.iqe"))
            {
                writer.WriteLine("# Inter-Quake Export");
                writer.WriteLine("");
                foreach (var bone in model.Bones)
                {
                    if(bone.KeyBoneId != M2Bone.KeyBone.Other) writer.WriteLine("joint \""+ bone.KeyBoneId + "\" " + bone.ParentBone);
                    else writer.WriteLine("joint \"\" " + bone.ParentBone);
                }
                writer.WriteLine("");
                foreach (var bone in model.Bones)
                {
                    writer.WriteLine("pq "+bone.Pivot.X+" "+bone.Pivot.Y+" "+bone.Pivot.Z);
                }
                writer.WriteLine("");
                writer.WriteLine("vertexarray position float 3");
                writer.WriteLine("vertexarray texcoord float 2");
                writer.WriteLine("vertexarray normal float 3");
                //writer.WriteLine("vertexarray tangent float 4");//TODO Tangents ?
                writer.WriteLine("vertexarray normal float 3");
                writer.WriteLine("");
                writer.WriteLine("mesh \""+"Test"+"\"");
                writer.WriteLine("material \""+"Texture.tga"+"\"");
                writer.WriteLine("");
                writer.WriteLine("");
                writer.WriteLine("");
            }
            */
        }