public static void TransformAnimationData(AnimationData animationData, ArmatureData armatureData) { SkinData skinData = armatureData.GetSkinData(null); List<BoneData> boneDataList = armatureData.BoneDataList; List<SlotData> slotDataList = skinData.SlotDataList; int i = boneDataList.Count; BoneData boneData; TransformTimeline timeline; SlotData slotData; DisplayData displayData; TransformTimeline parentTimeline; List<Frame> frameList; DBTransform originTransform; Point originPivot; TransformFrame prevFrame; uint frameListLength; TransformFrame frame; while(i -- >0) { boneData = boneDataList[i]; timeline = animationData.GetTimeline(boneData.Name); if(timeline == null) { continue; } slotData = null; foreach(SlotData slotDataObj in slotDataList) { if(slotDataObj.Parent == boneData.Name) { slotData = slotDataObj; break; } } parentTimeline = boneData.Parent!=null?animationData.GetTimeline(boneData.Parent):null; frameList = timeline.FrameList; originTransform = null; originPivot = null; prevFrame = null; frameListLength = (uint)frameList.Count; for(int j = 0;j < frameListLength;j ++) { frame = frameList[j] as TransformFrame; if(parentTimeline!=null) { //tweenValues to transform. _helpTransform1.Copy(frame.Global); //get transform from parent timeline. GetTimelineTransform(parentTimeline, frame.Position, _helpTransform2); TransformUtil.TransformPointWithParent(_helpTransform1, _helpTransform2); //transform to tweenValues. frame.Transform.Copy(_helpTransform1); } else { frame.Transform.Copy(frame.Global); } frame.Transform.X -= boneData.Transform.X; frame.Transform.Y -= boneData.Transform.Y; frame.Transform.SkewX -= boneData.Transform.SkewX; frame.Transform.SkewY -= boneData.Transform.SkewY; frame.Transform.ScaleX -= boneData.Transform.ScaleX; frame.Transform.ScaleY -= boneData.Transform.ScaleY; if(!timeline.Transformed) { if(slotData!=null) { frame.ZOrder -= slotData.ZOrder; } } if(originTransform == null) { originTransform = timeline.OriginTransform; originTransform.Copy(frame.Transform); originTransform.SkewX = TransformUtil.FormatRadian(originTransform.SkewX); originTransform.SkewY = TransformUtil.FormatRadian(originTransform.SkewY); originPivot = timeline.OriginPivot; originPivot.X = frame.Pivot.X; originPivot.Y = frame.Pivot.Y; } frame.Transform.X -= originTransform.X; frame.Transform.Y -= originTransform.Y; frame.Transform.SkewX = TransformUtil.FormatRadian(frame.Transform.SkewX - originTransform.SkewX); frame.Transform.SkewY = TransformUtil.FormatRadian(frame.Transform.SkewY - originTransform.SkewY); frame.Transform.ScaleX -= originTransform.ScaleX; frame.Transform.ScaleY -= originTransform.ScaleY; if(!timeline.Transformed) { frame.Pivot.Y -= originPivot.X; frame.Pivot.Y -= originPivot.Y; } if(prevFrame!=null) { float dLX = frame.Transform.SkewX - prevFrame.Transform.SkewX; if(prevFrame.TweenRotate!=0) { if(prevFrame.TweenRotate > 0) { if(dLX < 0) { frame.Transform.SkewX += (float)Math.PI * 2f; frame.Transform.SkewY += (float)Math.PI * 2f; } if(prevFrame.TweenRotate > 1) { frame.Transform.SkewX += (float)Math.PI * 2f * ((float)prevFrame.TweenRotate - 1f); frame.Transform.SkewY += (float)Math.PI * 2f * ((float)prevFrame.TweenRotate - 1f); } } else { if(dLX > 0) { frame.Transform.SkewX -= (float)Math.PI * 2f; frame.Transform.SkewY -= (float)Math.PI * 2f; } if(prevFrame.TweenRotate < 1) { frame.Transform.SkewX += (float)Math.PI * 2f * ((float)prevFrame.TweenRotate + 1f); frame.Transform.SkewY += (float)Math.PI * 2f * ((float)prevFrame.TweenRotate + 1f); } } } else { frame.Transform.SkewX = prevFrame.Transform.SkewX + TransformUtil.FormatRadian(frame.Transform.SkewX - prevFrame.Transform.SkewX); frame.Transform.SkewY = prevFrame.Transform.SkewY + TransformUtil.FormatRadian(frame.Transform.SkewY - prevFrame.Transform.SkewY); } } prevFrame = frame; } timeline.Transformed = true; } }
public static void AddHideTimeline(AnimationData animationData, ArmatureData armatureData) { List<BoneData> boneDataList =armatureData.BoneDataList; int i = boneDataList.Count; BoneData boneData; string boneName; while(i -- >0) { boneData = boneDataList[i]; boneName = boneData.Name; if(animationData.GetTimeline(boneName)==null) { animationData.AddTimeline(TransformTimeline.HIDE_TIMELINE, boneName); } } }
private static AnimationData parseAnimationData(Dictionary<String, Object> animationObject, ArmatureData armatureData, uint frameRate) { AnimationData animationData = new AnimationData(); animationData.Name = animationObject[ConstValues.A_NAME] as String; animationData.FrameRate = (uint)frameRate; animationData.Loop = int.Parse(animationObject[ConstValues.A_LOOP].ToString()); animationData.FadeInTime = (float)animationObject[ConstValues.A_FADE_IN_TIME]; animationData.Duration = (float)animationObject [ConstValues.A_DURATION] /frameRate; animationData.Scale = (float)animationObject[ConstValues.A_SCALE]; if(animationObject.ContainsKey(ConstValues.A_TWEEN_EASING)) { Object tweenEase = animationObject[ConstValues.A_TWEEN_EASING]; if( tweenEase == null ) { animationData.TweenEasing = float.NaN; } else { animationData.TweenEasing = (float)tweenEase; } } else { animationData.TweenEasing = float.NaN; } parseTimeline(animationObject as Dictionary<string, object>, animationData, parseMainFrame, frameRate); TransformTimeline timeline; string timelineName; foreach(Dictionary<String, Object> timelineObject in animationObject[ConstValues.TIMELINE] as List<object>) { timeline = parseTransformTimeline(timelineObject as Dictionary<string, object>, animationData.Duration, frameRate); timelineName = (timelineObject as Dictionary<string, object>)[ConstValues.A_NAME] as String; animationData.AddTimeline(timeline, timelineName); } DBDataUtil.AddHideTimeline(animationData, armatureData); DBDataUtil.TransformAnimationData(animationData, armatureData); return animationData; }
private void clearVaribles() { _armature = null; _currentFrame = null; _clip = null; _mixingTransforms = null; String[] keys = new string[_timelineStates.Count]; int i = 0; foreach(KeyValuePair<string, TimelineState> timelineState in _timelineStates) { keys[i] = timelineState.Key; i++; //removeTimelineState(timelineState.Key); } for(int j=0;j<keys.Length;j++) { removeTimelineState(keys[j]); } }
/** @private */ public void fadeIn(Armature armature, AnimationData clip, float fadeInTime, float timeScale, int loop, uint layer, bool displayControl, bool pauseBeforeFadeInComplete) { _armature = armature; _clip = clip; _name = _clip.Name; _layer = layer; _totalTime = _clip.Duration; if(Math.Round(_clip.Duration * _clip.FrameRate) < 2 || timeScale == float.PositiveInfinity) { _timeScale = 1; _currentTime = _totalTime; if(_loop >= 0) { _loop = 1; } else { _loop = -1; } } else { _timeScale = timeScale; _currentTime = 0; _loop = loop; } if(pauseBeforeFadeInComplete) { _pauseBeforeFadeInCompleteState = -1; } else { _pauseBeforeFadeInCompleteState = 1; } _fadeInTime = fadeInTime * _timeScale; _loopCount = -1; _fadeState = 1; _fadeOutBeginTime = 0; _fadeOutWeight = -1; _fadeWeight = 0; _isPlaying = true; _isComplete = false; _fadeIn = true; _fadeOut = false; this.DisplayControl = displayControl; Weight = 1; Blend = true; TweenEnabled = true; updateTimelineStates(); }
public void AddAnimationData(AnimationData animationData) { if(animationData == null) { throw new ArgumentException(); } if(_animationDataList.IndexOf(animationData) < 0) { _animationDataList.Add(animationData); } }