示例#1
0
 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));
     }
 }
示例#2
0
        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);
                        }
                    }
                }
            }
        }