示例#1
0
 static int CopyFrom(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 2);
         DragonBones.Transform obj  = (DragonBones.Transform)ToLua.CheckObject(L, 1, typeof(DragonBones.Transform));
         DragonBones.Transform arg0 = (DragonBones.Transform)ToLua.CheckObject(L, 2, typeof(DragonBones.Transform));
         DragonBones.Transform o    = obj.CopyFrom(arg0);
         ToLua.PushObject(L, o);
         return(1);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }
示例#2
0
        private void _getTimelineFrameMatrix(AnimationData animation,BoneTimelineData timeline,float position,Transform transform)    // Support 2.x ~ 3.x data.
        {
            var frameIndex = (int)Math.Floor(position * animation.frameCount / animation.duration);

            if (timeline.frames.Count == 1 || frameIndex >= timeline.frames.Count)
            {
                transform.CopyFrom(timeline.frames[0].transform);
            }
            else
            {
                var   frame         = timeline.frames[frameIndex];
                float tweenProgress = 0.0f;

                if (frame.tweenEasing != DragonBones.NO_TWEEN)
                {
                    tweenProgress = (position - frame.position) / frame.duration;
                    if (frame.tweenEasing != 0.0f)
                    {
                        tweenProgress = TweenTimelineState <BoneFrameData,BoneTimelineData> ._getEasingValue(tweenProgress,frame.tweenEasing);
                    }
                }
                else if (frame.curve != null)
                {
                    tweenProgress = (position - frame.position) / frame.duration;
                    tweenProgress = TweenTimelineState <BoneFrameData,BoneTimelineData> ._getCurveEasingValue(tweenProgress,frame.curve);
                }

                var nextFrame = frame.next;

                transform.x      = nextFrame.transform.x - frame.transform.x;
                transform.y      = nextFrame.transform.y - frame.transform.y;
                transform.skewX  = Transform.NormalizeRadian(nextFrame.transform.skewX - frame.transform.skewX);
                transform.skewY  = Transform.NormalizeRadian(nextFrame.transform.skewY - frame.transform.skewY);
                transform.scaleX = nextFrame.transform.scaleX - frame.transform.scaleX;
                transform.scaleY = nextFrame.transform.scaleY - frame.transform.scaleY;

                transform.x      = frame.transform.x + transform.x * tweenProgress;
                transform.y      = frame.transform.y + transform.y * tweenProgress;
                transform.skewX  = frame.transform.skewX + transform.skewX * tweenProgress;
                transform.skewY  = frame.transform.skewY + transform.skewY * tweenProgress;
                transform.scaleX = frame.transform.scaleX + transform.scaleX * tweenProgress;
                transform.scaleY = frame.transform.scaleY + transform.scaleY * tweenProgress;
            }

            transform.Add(timeline.originTransform);
        }
示例#3
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);
                        }
                    }
                }
            }
        }
示例#4
0
        override protected void _onArriveAtFrame(bool isUpdate)
        {
            base._onArriveAtFrame(isUpdate);

            _currentTransform.CopyFrom(this._currentFrame.transform);

            _tweenTransform = TweenType.Once;
            _tweenRotate    = TweenType.Once;
            _tweenScale     = TweenType.Once;

            if (_keyFrameCount > 1 && (this._tweenEasing != DragonBones.NO_TWEEN || this._curve != null))
            {
                var nextFrame     = this._currentFrame.next;
                var nextTransform = nextFrame.transform;

                // Transform.
                _durationTransform.x = nextTransform.x - _currentTransform.x;
                _durationTransform.y = nextTransform.y - _currentTransform.y;
                if (_durationTransform.x != 0.0f || _durationTransform.y != 0.0f)
                {
                    _tweenTransform = TweenType.Always;
                }

                // Rotate.
                var tweenRotate = _currentFrame.tweenRotate;
                if (!float.IsNaN(tweenRotate))
                {
                    if (tweenRotate != 0.0f)
                    {
                        if (tweenRotate > 0.0f ? nextTransform.skewY >= _currentTransform.skewY : nextTransform.skewY <= _currentTransform.skewY)
                        {
                            var rotate = tweenRotate > 0 ? tweenRotate - 1.0f : tweenRotate + 1.0f;
                            _durationTransform.skewX = nextTransform.skewX - _currentTransform.skewX + DragonBones.PI_D * rotate;
                            _durationTransform.skewY = nextTransform.skewY - _currentTransform.skewY + DragonBones.PI_D * rotate;
                        }
                        else
                        {
                            _durationTransform.skewX = nextTransform.skewX - _currentTransform.skewX + DragonBones.PI_D * tweenRotate;
                            _durationTransform.skewY = nextTransform.skewY - _currentTransform.skewY + DragonBones.PI_D * tweenRotate;
                        }
                    }
                    else
                    {
                        _durationTransform.skewX = Transform.NormalizeRadian(nextTransform.skewX - _currentTransform.skewX);
                        _durationTransform.skewY = Transform.NormalizeRadian(nextTransform.skewY - _currentTransform.skewY);
                    }

                    if (_durationTransform.skewX != 0.0f || _durationTransform.skewY != 0.0f)
                    {
                        _tweenRotate = TweenType.Always;
                    }
                }
                else
                {
                    _durationTransform.skewX = 0.0f;
                    _durationTransform.skewY = 0.0f;
                }

                // Scale.
                if (_currentFrame.tweenScale)
                {
                    _durationTransform.scaleX = nextTransform.scaleX - _currentTransform.scaleX;
                    _durationTransform.scaleY = nextTransform.scaleY - _currentTransform.scaleY;
                    if (_durationTransform.scaleX != 0.0f || _durationTransform.scaleY != 0.0f)
                    {
                        _tweenScale = TweenType.Always;
                    }
                }
                else
                {
                    _durationTransform.scaleX = 0.0f;
                    _durationTransform.scaleY = 0.0f;
                }
            }
            else
            {
                _durationTransform.x      = 0.0f;
                _durationTransform.y      = 0.0f;
                _durationTransform.skewX  = 0.0f;
                _durationTransform.skewY  = 0.0f;
                _durationTransform.scaleX = 0.0f;
                _durationTransform.scaleY = 0.0f;
            }
        }