| | |
| | | |
| | | public class MotionBase |
| | | { |
| | | public static float MotionTimeScale = 1f; |
| | | public float MotionTimeScale = 1f; |
| | | public static List<string> AttackMotionList = new List<string> |
| | | { |
| | | MotionName.attack.ToString().ToLower(), |
| | |
| | | private Spine.TrackEntry currentTrack; |
| | | private SkeletonIllusionShadow illusionShadow; |
| | | private bool playingSkillAnim = false; |
| | | |
| | | private bool isUnderControl = false; |
| | | |
| | | private float pauseTime = 0f; |
| | | |
| | |
| | | private Spine.TrackEntry ExecuteSkillAnim(SkillConfig skillConfig, SkillBase skillBase, Action onComplete, |
| | | Spine.Animation targetAnim, bool hasAnim, bool isSubSkill) |
| | | { |
| | | |
| | | bool isPangdeSkill = 1003020 == skillConfig.SkillID; |
| | | |
| | | int loopCount = skillConfig.LoopCount; |
| | |
| | | protected virtual void OnAnimationComplete(Spine.TrackEntry trackEntry) |
| | | { |
| | | if (trackEntry?.Animation?.Name == null) return; |
| | | |
| | | |
| | | string animName = trackEntry.Animation.Name.ToLower(); |
| | | |
| | | if (AttackMotionList.Contains(animName)) |
| | |
| | | OnHitAnimationComplete?.Invoke(); |
| | | PlayAnimation(MotionName.idle, true); |
| | | } |
| | | |
| | | |
| | | if (trackEntryCallbacks.TryGetValue(trackEntry, out var callback)) |
| | | { |
| | | trackEntryCallbacks.Remove(trackEntry); |
| | | callback?.Invoke(); |
| | | } |
| | | } |
| | | |
| | | public void SetControledAnimation() |
| | | { |
| | | // 受到硬控的时候,保持受击动画的第三帧,直到控制结束 或者最后一击死亡,移除控制效果后,恢复到待机状态或者播放死亡动画 |
| | | // 这里是受到硬控时候 需要表现的动画 |
| | | |
| | | var entry = PlayAnimation(MotionName.hit, false); |
| | | float threeFrameTrackTime = 3f / BattleConst.skillMotionFps; |
| | | entry.TrackTime = threeFrameTrackTime; |
| | | entry.TimeScale = 0; |
| | | |
| | | isUnderControl = true; |
| | | |
| | | } |
| | | |
| | | public void CancelControledAnimation() |
| | | { |
| | | // 硬控结束,恢复动画播放 |
| | | isUnderControl = false; |
| | | PlayAnimation(MotionName.idle, true); |
| | | } |
| | | |
| | | public virtual void Run() |
| | |
| | | if (skeletonAnim != null) skeletonAnim.timeScale = ratio; |
| | | } |
| | | |
| | | public void ShowIllusionShadow(bool isVisible) |
| | | public void ShowIllusionShadow(bool isVisible, Color color = default) |
| | | { |
| | | if (illusionShadow != null) |
| | | { |
| | | illusionShadow.SetSkeletonAnimation(skeletonAnim); |
| | | illusionShadow.Show(isVisible); |
| | | illusionShadow.Show(isVisible, color); |
| | | } |
| | | } |
| | | } |