Exemplo n.º 1
0
		/**
		 * Move the playhead to that AnimationData
		 * @param animationName The name of the AnimationData to play.
		 * @param fadeInTime A fade time to apply (> 0)
		 * @param duration The duration of that AnimationData.
		 * @param loop Loop(0:loop forever, 1~+∞:loop times, -1~-∞:will fade animation after loop complete).
		 * @param layer The layer of the animation.
		 * @param group The group of the animation.
		 * @param fadeOutMode Fade out mode.
		 * @param displayControl Display control.
		 * @param pauseFadeOut Pause other animation playing.
		 * @param pauseFadeIn Pause this animation playing before fade in complete.
		 * @see dragonBones.objects.AnimationData.
		 * @see dragonBones.animation.AnimationState.
		 */
		public AnimationState GotoAndPlay(
			string animationName, 
			float fadeInTime = -1f, 
			float duration = -1f, 
			float loop = float.NaN, 
			uint layer = 0, 
			string group = null,
			string fadeOutMode = SAME_LAYER_AND_GROUP,
			bool displayControl = true,
			bool pauseFadeOut = true,
			bool pauseFadeIn = true
		)
		{
			if (_animationDataList==null)
			{
				return null;
			}
			int i = _animationDataList.Count;
			int j;
			AnimationData animationData = null;
			while(i -- >0)
			{
				if(_animationDataList[i].Name == animationName)
				{
					animationData = _animationDataList[i];
					break;
				}
			}
			if (animationData==null)
			{
                Debug.LogError(string.Format("Cannot find animation {0}", animationName));
				return null;
			}
			
			_isPlaying = true;

			fadeInTime = fadeInTime < 0?(animationData.FadeInTime < 0?0.3f:animationData.FadeInTime):fadeInTime;
			
			float durationScale;
			if(duration < 0)
			{
				durationScale = animationData.Scale < 0?1:animationData.Scale;
			}
			else
			{
				durationScale = duration / animationData.Duration;
			}
			
			loop = float.IsNaN(loop)?animationData.Loop:loop;
			layer = addLayer(layer);
			
			//autoSync = autoSync && !pauseFadeOut && !pauseFadeIn;
			AnimationState animationState;
			List<AnimationState> animationStateList;
			switch(fadeOutMode)
			{
			case NONE:
				break;
			case SAME_LAYER:
				animationStateList = _animationLayer[(int)layer];
				i = animationStateList.Count;
				while(i -- >0)
				{
					animationState = animationStateList[i];
					animationState.FadeOut(fadeInTime, pauseFadeOut);
				}
				break;
			case SAME_GROUP:
				j = _animationLayer.Count;
				while(j -- >0)
				{
					animationStateList = _animationLayer[j];
					i = animationStateList.Count;
					while(i -- >0)
					{
						animationState = animationStateList[i];
						if(animationState.Group == group)
						{
							animationState.FadeOut(fadeInTime, pauseFadeOut);
						}
					}
				}
				break;
			case ALL:
			    j = _animationLayer.Count;
				while(j -- >0)
				{
					animationStateList = _animationLayer[j];
					i = animationStateList.Count;
					while(i -- >0)
					{
						animationState = animationStateList[i];
						animationState.FadeOut(fadeInTime, pauseFadeOut);
					}
				}
				break;
			case SAME_LAYER_AND_GROUP:
			default:
				animationStateList = _animationLayer[(int)layer];
				i = animationStateList.Count;
				while(i -- >0)
				{
					animationState = animationStateList[i];
					if(animationState.Group == group)
					{
						animationState.FadeOut(fadeInTime, pauseFadeOut);
					}
				}

				break;
			}

			_lastAnimationState = AnimationState.borrowObject();
			_lastAnimationState.Group = group;
			_lastAnimationState.TweenEnabled = TweenEnabled;
			_lastAnimationState.fadeIn(_armature, animationData, fadeInTime, 1 / durationScale, (int)loop, layer, displayControl, pauseFadeIn);
			
			addState(_lastAnimationState);
			
			List<Slot> slotList = _armature._slotList;
			Slot slot;
			i = slotList.Count;
			while(i -- >0)
			{
				slot = slotList[i];
				if(slot.ChildArmature!=null)
				{
					slot.ChildArmature.Animation.GotoAndPlay(animationName, fadeInTime);
				}
			}
			
			_lastAnimationState.AdvanceTime(0);
			
			return _lastAnimationState;
		}
Exemplo n.º 2
0
        /**
         * Move the playhead to that AnimationData
         * @param animationName The name of the AnimationData to play.
         * @param fadeInTime A fade time to apply (> 0)
         * @param duration The duration of that AnimationData.
         * @param loop Loop(0:loop forever, 1~+∞:loop times, -1~-∞:will fade animation after loop complete).
         * @param layer The layer of the animation.
         * @param group The group of the animation.
         * @param fadeOutMode Fade out mode.
         * @param displayControl Display control.
         * @param pauseFadeOut Pause other animation playing.
         * @param pauseFadeIn Pause this animation playing before fade in complete.
         * @see dragonBones.objects.AnimationData.
         * @see dragonBones.animation.AnimationState.
         */
        public AnimationState GotoAndPlay(
            string animationName,
            float fadeInTime    = -1f,
            float duration      = -1f,
            float loop          = float.NaN,
            uint layer          = 0,
            string group        = null,
            string fadeOutMode  = SAME_LAYER_AND_GROUP,
            bool displayControl = true,
            bool pauseFadeOut   = true,
            bool pauseFadeIn    = true
            )
        {
            if (_animationDataList == null)
            {
                return(null);
            }
            int           i = _animationDataList.Count;
            int           j;
            AnimationData animationData = null;

            while (i-- > 0)
            {
                if (_animationDataList[i].Name == animationName)
                {
                    animationData = _animationDataList[i];
                    break;
                }
            }
            if (animationData == null)
            {
                Debug.LogError(string.Format("Cannot find animation {0}", animationName));
                return(null);
            }

            _isPlaying = true;

            fadeInTime = fadeInTime < 0?(animationData.FadeInTime < 0?0.3f:animationData.FadeInTime):fadeInTime;

            float durationScale;

            if (duration < 0)
            {
                durationScale = animationData.Scale < 0?1:animationData.Scale;
            }
            else
            {
                durationScale = duration / animationData.Duration;
            }

            loop  = float.IsNaN(loop)?animationData.Loop:loop;
            layer = addLayer(layer);

            //autoSync = autoSync && !pauseFadeOut && !pauseFadeIn;
            AnimationState        animationState;
            List <AnimationState> animationStateList;

            switch (fadeOutMode)
            {
            case NONE:
                break;

            case SAME_LAYER:
                animationStateList = _animationLayer[(int)layer];
                i = animationStateList.Count;
                while (i-- > 0)
                {
                    animationState = animationStateList[i];
                    animationState.FadeOut(fadeInTime, pauseFadeOut);
                }
                break;

            case SAME_GROUP:
                j = _animationLayer.Count;
                while (j-- > 0)
                {
                    animationStateList = _animationLayer[j];
                    i = animationStateList.Count;
                    while (i-- > 0)
                    {
                        animationState = animationStateList[i];
                        if (animationState.Group == group)
                        {
                            animationState.FadeOut(fadeInTime, pauseFadeOut);
                        }
                    }
                }
                break;

            case ALL:
                j = _animationLayer.Count;
                while (j-- > 0)
                {
                    animationStateList = _animationLayer[j];
                    i = animationStateList.Count;
                    while (i-- > 0)
                    {
                        animationState = animationStateList[i];
                        animationState.FadeOut(fadeInTime, pauseFadeOut);
                    }
                }
                break;

            case SAME_LAYER_AND_GROUP:
            default:
                animationStateList = _animationLayer[(int)layer];
                i = animationStateList.Count;
                while (i-- > 0)
                {
                    animationState = animationStateList[i];
                    if (animationState.Group == group)
                    {
                        animationState.FadeOut(fadeInTime, pauseFadeOut);
                    }
                }

                break;
            }

            _lastAnimationState              = AnimationState.borrowObject();
            _lastAnimationState.Group        = group;
            _lastAnimationState.TweenEnabled = TweenEnabled;
            _lastAnimationState.fadeIn(_armature, animationData, fadeInTime, 1 / durationScale, (int)loop, layer, displayControl, pauseFadeIn);

            addState(_lastAnimationState);

            List <Slot> slotList = _armature._slotList;
            Slot        slot;

            i = slotList.Count;
            while (i-- > 0)
            {
                slot = slotList[i];
                if (slot.ChildArmature != null)
                {
                    slot.ChildArmature.Animation.GotoAndPlay(animationName, fadeInTime);
                }
            }

            _lastAnimationState.AdvanceTime(0);

            return(_lastAnimationState);
        }