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