Exemplo n.º 1
0
    public void StopAnim()
    {
        if (Avatar.LogAnim)
        {
            avatar.Log(System.String.Format("Stop Anim:{0}", playingAnimation != null ? playingAnimation.animationName : "null"));
        }

        // Reset the old animation.
        playingAnimation = null;
    }
Exemplo n.º 2
0
    public bool PlayAnim(string animationName)
    {
        // Get animation config.
        AnimationConfig.Animation animationCfg = ConfigDatabase.DefaultCfg.AnimationConfig.GetAnimation(animationName);
        if (animationCfg == null)
        {
            Debug.LogWarning("Miss animation in config : " + animationName);
            return(false);
        }

        // If current animation is playing, return directly.
        if (playingAnimation != null && playingAnimation.animationName == animationCfg.name && avatarAnimCmp.IsPlaying(animationCfg.name))
        {
            return(true);
        }

        // Stop current animation.
        StopAnim();

        // Load animation
        LoadAnimation(animationName);

        // If has no this animation state, return.
        if (avatarAnimCmp[animationCfg.name] == null)
        {
            Debug.LogWarning("Miss animation  : " + animationCfg.name);
            return(false);
        }

        // New animation data.
        playingAnimation = new PlayingAnim();
        playingAnimation.animationName  = animationCfg.name;
        playingAnimation.animationState = avatarAnimCmp[animationCfg.name];
        playingAnimation.startFrame     = animationCfg.startFrame;
        playingAnimation.endFrame       = animationCfg.endFrame;

        // Set animation speed.
        playingAnimation.Speed = animationCfg.speed;

        // Adjust animation play direction.
        playingAnimation.Speed = Mathf.Abs(playingAnimation.Speed) * (animationCfg.endFrame < animationCfg.startFrame ? -1 : 1);

        // Restart animation.
        playingAnimation.Time = playingAnimation.IsReverse ? playingAnimation.Length : 0;

        if (playingAnimation.IsLoop)
        {
            // Loop animation not set extra fade time.
            playingAnimation.fadeTime          = 0;
            playingAnimation.movementStartTime = playingAnimation.IsReverse ? playingAnimation.Length : 0;
            playingAnimation.movementDuration  = playingAnimation.Length;
        }
        else
        {
            // Calculate cross fade time.
            playingAnimation.fadeTime = playingAnimation.Length * 0.1f;

            // Set max cross time.
            if (playingAnimation.fadeTime > GameDefines.animCrossFadeTime)
            {
                playingAnimation.fadeTime = GameDefines.animCrossFadeTime;
            }

            // Calculate movement start time
            playingAnimation.movementStartTime = (animationCfg.moveStartFrame - Mathf.Min(animationCfg.moveEndFrame, animationCfg.moveStartFrame)) / playingAnimation.animationState.clip.frameRate;
            if (playingAnimation.movementStartTime < 0)
            {
                playingAnimation.movementStartTime = playingAnimation.IsReverse ? playingAnimation.Length : 0;
            }

            // Calculate movement duration
            playingAnimation.movementDuration = Mathf.Abs(animationCfg.moveStartFrame - animationCfg.moveEndFrame) / playingAnimation.animationState.clip.frameRate;

            if (playingAnimation.movementDuration <= 0)
            {
                playingAnimation.movementDuration = playingAnimation.Length;
            }

            // Force non-loop animation to WrapMode.ClampForever, to ensure AnimationState.time works correctly
            if (playingAnimation.animationState.wrapMode == WrapMode.Default || playingAnimation.animationState.wrapMode == WrapMode.Once)
            {
                playingAnimation.animationState.wrapMode = WrapMode.ClampForever;
            }
        }

        // Switch to this animation state.
        if (avatarAnimCmp.isPlaying)
        {
            avatarAnimCmp.CrossFade(playingAnimation.animationName, playingAnimation.fadeTime <= 0 ? GameDefines.animCrossFadeTime : playingAnimation.fadeTime);
        }
        else
        {
            avatarAnimCmp.Play(playingAnimation.animationName);
        }

        if (Avatar.LogAnim)
        {
            avatar.Log(System.String.Format("PlayAnim Anim:{0}", playingAnimation.animationName));
        }

        return(true);
    }