Exemplo n.º 1
0
		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;
			}
		}
Exemplo n.º 2
0
		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);
				}
			}
		}