public WeaverAnimationData.Clip GetClip(string clipName)
	{
		if (!HasClip(clipName))
		{
			throw new Exception("The clip " + clipName + " does not exist on this animator");
		}

		var clipIndex = GetClipIndex(clipName);

		var clipFPSs = serializedObject.FindProperty("clipFPSs");
		var clipLoopStarts = serializedObject.FindProperty("clipLoopStarts");
		var clipWrapModes = serializedObject.FindProperty("clipWrapModes");
		var clipFrameStartIndexes = serializedObject.FindProperty("clipFrameStartIndexes");
		var clipFrameCounts = serializedObject.FindProperty("clipFrameCounts");
		var frames = serializedObject.FindProperty("frames");

		var clip = new WeaverAnimationData.Clip
		{
			FPS = clipFPSs.GetArrayElementAtIndex(clipIndex).floatValue,//clipFPSs[clipIndex],
			LoopStart = clipLoopStarts.GetArrayElementAtIndex(clipIndex).intValue,//clipLoopStarts[clipIndex],
			Name = clipName,
			WrapMode = (WeaverAnimationData.WrapMode)clipWrapModes.GetArrayElementAtIndex(clipIndex).enumValueIndex//clipWrapModes[clipIndex]
		};

		var frameStart = clipFrameStartIndexes.GetArrayElementAtIndex(clipIndex).intValue;//clipFrameStartIndexes[clipIndex];
		var frameCount = clipFrameCounts.GetArrayElementAtIndex(clipIndex).intValue;//clipFrameCounts[clipIndex];

		//Debug.Log("Frames_A = " + clip.Frames);
		//Debug.Log("Frame Count = " + frameCount);

		for (int i = frameStart; i < frameStart + frameCount; i++)
		{
			//clip.AddFrame(frames[i]);
			clip.AddFrame((Sprite)frames.GetArrayElementAtIndex(i).objectReferenceValue);
		}
		return clip;
	}
Exemple #2
0
        public static IEnumerator DecomposeTK2DAnimation(UnityEngine.Object tk2dSpriteAnimation, string animationName = null)
        {
            //var data = GetCollectionData(tk2dSpriteCollection);

            if (animationName == null)
            {
                animationName = "DecomposedAnimation";
            }

            var animationData = GetAnimationData(tk2dSpriteAnimation);

            Dictionary <int, SpriteCollectionData> spriteCollections = new Dictionary <int, SpriteCollectionData>();


            Dictionary <int, SpritePackage> sprites = new Dictionary <int, SpritePackage>();

            foreach (var clip in animationData.Clips)
            {
                foreach (var frame in clip.Frames)
                {
                    if (!spriteCollections.ContainsKey(frame.SpriteCollectionRaw.GetInstanceID()))
                    {
                        spriteCollections.Add(frame.SpriteCollectionRaw.GetInstanceID(), GetCollectionData(frame.SpriteCollectionRaw));

                        OutClass <SpritePackage> outputSprites = new OutClass <SpritePackage>();
                        //List<Sprite> sprites = new List<Sprite>();

                        yield return(UnpackToSpriteAsyncInternal(frame.SpriteCollectionRaw, outputSprites, "Assets\\" + animationName));

                        sprites.Add(frame.SpriteCollectionRaw.GetInstanceID(), outputSprites.Value);
                    }
                }
            }

            WeaverAnimationData data = ScriptableObject.CreateInstance <WeaverAnimationData>();

            foreach (var clipRaw in animationData.Clips)
            {
                if (clipRaw.Name == null || clipRaw.Name == "")
                {
                    continue;
                }
                var clip = new WeaverAnimationData.Clip
                {
                    FPS       = clipRaw.FPS,
                    LoopStart = clipRaw.LoopStart,
                    Name      = clipRaw.Name,
                };
                switch (clipRaw.WrapMode)
                {
                case WrapMode.Loop:
                    clip.WrapMode = WeaverAnimationData.WrapMode.Loop;
                    break;

                case WrapMode.LoopSection:
                    clip.WrapMode = WeaverAnimationData.WrapMode.LoopSection;
                    break;

                case WrapMode.Once:
                    clip.WrapMode = WeaverAnimationData.WrapMode.Once;
                    break;

                case WrapMode.PingPong:
                    clip.WrapMode = WeaverAnimationData.WrapMode.PingPong;
                    break;

                case WrapMode.RandomFrame:
                    clip.WrapMode = WeaverAnimationData.WrapMode.RandomFrame;
                    break;

                case WrapMode.RandomLoop:
                    clip.WrapMode = WeaverAnimationData.WrapMode.RandomLoop;
                    break;

                case WrapMode.Single:
                    clip.WrapMode = WeaverAnimationData.WrapMode.SingleFrame;
                    break;

                default:
                    break;
                }

                foreach (var frameRaw in clipRaw.Frames)
                {
                    clip.AddFrame(sprites[frameRaw.SpriteCollectionRaw.GetInstanceID()].GetSprite(frameRaw.SpriteID));
                }

                data.AddClip(clip);
            }



            AssetDatabase.CreateAsset(data, "Assets/" + animationName + "/" + animationName + ".asset");
        }