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()); }
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); }