/// <summary> /// Play selected animation /// </summary> /// <param name="animation">animation to play</param> /// <param name="lastTime">the last time the animation was applied</param> /// <param name="time">the time in duration to start animation at</param> /// <param name="isLoop">should animation loop</param> /// <param name="trackIndex">track to play animation in</param> /// <param name="individualTimeScale">time scale of this animation</param> public void Play(SpineAnimationsEnum animation, float lastTime = 0, float time = 0, bool isLoop = false, int trackIndex = 0, float individualTimeScale = 1f) { if (currentAnimation == animation) { return; } lastAnimation = currentAnimation; currentAnimation = animation; //if (animation != Animations.hit) //{ // if (currentAnimation == animation) // return; // lastAnimation = currentAnimation; // currentAnimation = animation; //} //else //{ // if (currentAnimation != Animations.idle || currentAnimation != Animations.move || currentAnimation != Animations.up_move) // return; //} //Spine.Animation curAnimation = null; //if (lastAnimation != currentAnimation) { // if (spine.state.GetCurrent(trackIndex) != null) { // spine.state.GetCurrent(trackIndex).Loop = false; // curAnimation = spine.state.GetCurrent(trackIndex).Animation; // } //} else return; Spine.Animation loadedAnim = getSpineAnimation(animation); //loadedAnim.Name(spine.Skeleton, lastTime, time, isLoop, null, alphaMix); if (lastAnimation != currentAnimation) { //if (lastAnimation != Animations.idle // && lastAnimation != Animations.move // && lastAnimation != Animations.knock_back // && lastAnimation != Animations.knock_down // && lastAnimation != Animations.stand_up) spine.Skeleton.SetToSetupPose(); } //if (trackIndex == Constant.DEFAULT_TRACK_INDEX) { spine.state.ClearTrack(trackIndex); //} //if (curAnimation != null) { // if (lastAnimation == Animations.idle // || lastAnimation == Animations.move // /*|| lastAnimation == Animations.knock_down*/ // /*|| lastAnimation == Animations.stand_up*/ // /*|| lastAnimation == Animations.stunned*/) { // curAnimation.Apply(spine.skeleton, 0f, 0f, false, null); // spine.state.AddAnimation(trackIndex, curAnimation, false, 0f); // } //} spine.state.AddAnimation(trackIndex, loadedAnim, isLoop, Time.deltaTime); spine.state.GetCurrent(trackIndex).TimeScale = individualTimeScale; }
public Spine.Animation getSpineAnimation(SpineAnimationsEnum animation) { // check in cached Spine.Animation load = cachedAnimations.Find(a => a.Name == animation.ToString()); if (load == null) { // load from spine load = spine.Skeleton.Data.FindAnimation(animation.ToString()); if (load == null) { throw new ArgumentNullException("Can not find animation '" + animation.ToString() + "'" + " on " + name); } } return(load); }
/// <summary> /// Play selected animation /// </summary> /// <param name="animation">animation name to play</param> /// <param name="lastTime">the last time the animation was applied</param> /// <param name="time">the time in duration to start animation at</param> /// <param name="isLoop">should animation loop</param> /// <param name="trackIndex">track to play animation in</param> /// <param name="individualTimeScale">time scale of this animation</param> public void Play(string animation, float lastTime = 0, float time = 0, bool isLoop = false, int trackIndex = 0, float individualTimeScale = 1f) { SpineAnimationsEnum anim = (SpineAnimationsEnum)Enum.Parse(typeof(SpineAnimationsEnum), animation); this.Play(anim, lastTime, time, isLoop, trackIndex, individualTimeScale); }