static int ToMatrix(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); DragonBones.Transform obj = (DragonBones.Transform)ToLua.CheckObject(L, 1, typeof(DragonBones.Transform)); DragonBones.Matrix arg0 = (DragonBones.Matrix)ToLua.CheckObject(L, 2, typeof(DragonBones.Matrix)); DragonBones.Transform o = obj.ToMatrix(arg0); ToLua.PushObject(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
protected void _globalToLocal(ArmatureData armature) // Support 2.x ~ 3.x data. { var keyFrames = new List <BoneFrameData>(); var bones = armature.sortedBones.ToArray(); Array.Reverse(bones); foreach (var bone in bones) { if (bone.parent != null) { bone.parent.transform.ToMatrix(_helpMatrix); _helpMatrix.Invert(); _helpMatrix.TransformPoint(bone.transform.x,bone.transform.y,_helpPoint); bone.transform.x = _helpPoint.x; bone.transform.y = _helpPoint.y; bone.transform.rotation -= bone.parent.transform.rotation; } foreach (var pair in armature.animations) { var animation = pair.Value; var timeline = animation.GetBoneTimeline(bone.name); if (timeline == null) { continue; } var parentTimeline = bone.parent != null?animation.GetBoneTimeline(bone.parent.name) : null; _helpTransformB.CopyFrom(timeline.originTransform); keyFrames.Clear(); var isFirstFrame = true; foreach (var frame in timeline.frames) { if (keyFrames.Contains(frame)) { continue; } keyFrames.Add(frame); if (parentTimeline != null) { _getTimelineFrameMatrix(animation,parentTimeline,frame.position,_helpTransformA); frame.transform.Add(_helpTransformB); _helpTransformA.ToMatrix(_helpMatrix); _helpMatrix.Invert(); _helpMatrix.TransformPoint(frame.transform.x,frame.transform.y,_helpPoint); frame.transform.x = _helpPoint.x; frame.transform.y = _helpPoint.y; frame.transform.rotation -= _helpTransformA.rotation; } else { frame.transform.Add(_helpTransformB); } frame.transform.Minus(bone.transform); if (isFirstFrame) { isFirstFrame = false; timeline.originTransform.CopyFrom(frame.transform); frame.transform.Identity(); } else { frame.transform.Minus(timeline.originTransform); } } } } }