private NwMotion[] ConvertMotion(ImportedObject obj)
        {
            var mos = new List <NwMotion>();

            if (obj.Motions == null)
            {
                obj.Motions = new Motion[0];
            }

            foreach (var mo in obj.Motions)
            {
                var m = new NwMotion();
                m.Name = mo.Name;

                m.BoneMotion = new Dictionary <string, NwBoneMotion>();
                if (mo.BoneMotions != null)
                {
                    foreach (var bm in mo.BoneMotions)
                    {
                        var bmv = new NwBoneMotion();
                        bmv.BoneName = bm.Value.BoneName;
                        bmv.Keys     = new List <NwBoneMotionValue>();
                        foreach (var k in bm.Value.Keys)
                        {
                            var v = new NwBoneMotionValue();
                            v.FrameNo  = k.FrameNo;
                            v.Location = k.Value.location.ToVec3f();
                            v.Rotation = new Vector4f(k.Value.rotation.X, k.Value.rotation.Y, k.Value.rotation.Z, k.Value.rotation.W);
                            v.Scale    = k.Value.scale.ToVec3f();

                            v.Interpolate = ConvertInterpolate(k.Interpolate);

                            bmv.Keys.Add(v);
                        }

                        m.BoneMotion.Add(bmv.BoneName, bmv);
                    }
                }

                m.MorphMotion = new Dictionary <string, NwMorphMotion>();
                if (mo.SkinMotions != null)
                {
                    foreach (var sm in mo.SkinMotions)
                    {
                        var mmv = new NwMorphMotion();
                        mmv.MorphName = sm.Value.MorphName;
                        mmv.Keys      = new List <NwMorphMotionValue>();
                        foreach (var k in sm.Value.Keys)
                        {
                            var v = new NwMorphMotionValue();
                            v.FrameNo     = k.FrameNo;
                            v.Rate        = k.Value;
                            v.Interpolate = ConvertInterpolate(k.Interpolate);

                            mmv.Keys.Add(v);
                        }

                        m.MorphMotion.Add(mmv.MorphName, mmv);
                    }
                }

                mos.Add(m);
            }

            return(mos.ToArray());
        }
Beispiel #2
0
        public static Motion FromNwMotion(NwMotion motion)
        {
            var m = new Motion();

            m.Name = motion.Key;

            if (motion.BoneMotion != null)
            {
                m.BoneMotions = new Dictionary <string, BoneMotion>();
                foreach (var bm in motion.BoneMotion.Values)
                {
                    var bmv = new BoneMotion();
                    bmv.BoneName = bm.BoneName;
                    bmv.Keys     = new List <KeyFrame <BoneMotionValue> >();
                    foreach (var key in bm.Keys)
                    {
                        var f = new KeyFrame <BoneMotionValue>();
                        f.FrameNo = key.FrameNo;
                        if (key.FrameNo > m.FrameNoMax)
                        {
                            m.FrameNoMax = key.FrameNo;
                        }
                        f.Interpolate = new BezierInterpolate()
                        {
                            p1 = key.Interpolate.P1.FromVec2f(), p2 = key.Interpolate.P2.FromVec2f()
                        };
                        var r = key.Rotation.FromVec4f();
                        f.Value = new BoneMotionValue()
                        {
                            location = key.Location.FromVec3f(),
                            rotation = new Quaternion(r.X, r.Y, r.Z, r.W),
                            scale    = key.Scale.FromVec3f(),
                        };
                        bmv.Keys.Add(f);
                    }

                    m.BoneMotions.Add(bm.BoneName, bmv);
                }
            }

            if (motion.MorphMotion != null)
            {
                m.SkinMotions = new Dictionary <string, SkinMotion>();
                foreach (var mm in motion.MorphMotion.Values)
                {
                    var smv = new SkinMotion();
                    smv.MorphName = mm.MorphName;
                    smv.Keys      = new List <KeyFrame <float> >();
                    foreach (var key in mm.Keys)
                    {
                        var f = new KeyFrame <float>();
                        f.FrameNo = key.FrameNo;
                        if (key.FrameNo > m.FrameNoMax)
                        {
                            m.FrameNoMax = key.FrameNo;
                        }
                        f.Interpolate = new BezierInterpolate()
                        {
                            p1 = key.Interpolate.P1.FromVec2f(), p2 = key.Interpolate.P2.FromVec2f()
                        };
                        f.Value = key.Rate;
                        smv.Keys.Add(f);
                    }

                    m.SkinMotions.Add(mm.MorphName, smv);
                }
            }

            return(m);
        }