| | |
| | | private Dictionary<SkillBase, int> subSkillTrackMap = new Dictionary<SkillBase, int>(); |
| | | |
| | | private SkeletonIllusionShadow illusionShadow; |
| | | private bool playingSkillAnim = false; |
| | | private bool playingSkill = false; |
| | | |
| | | private bool playingSkillWithAnim = false; |
| | | |
| | | private bool isUnderControl = false; |
| | | |
| | |
| | | skeletonAnim = null; |
| | | skeleton = null; |
| | | currentTrack = null; |
| | | playingSkillAnim = false; |
| | | playingSkill = false; |
| | | playingSkillWithAnim = false; |
| | | } |
| | | |
| | | public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop, Action onComplete = null) |
| | | { |
| | | if (playingSkillAnim || animState == null) return null; |
| | | if (playingSkill || animState == null) return null; |
| | | |
| | | if (currentTrack != null && !currentTrack.IsComplete && trackEntryCallbacks.TryGetValue(currentTrack, out var prevCallback)) |
| | | { |
| | |
| | | currentTrack = skillTrack; |
| | | |
| | | activeSkillTracks[trackIndex] = skillTrack; |
| | | |
| | | playingSkillWithAnim = true; |
| | | } |
| | | |
| | | playingSkillAnim = true; |
| | | playingSkill = true; |
| | | |
| | | int currentLoop = 0, triggerCount = 0, failCount = 0; |
| | | bool beginTriggered = false, finalStarted = false, finalEnded = false, middleStarted = false; |
| | |
| | | |
| | | // 只有当没有其他活跃技能时才复位 playingSkillAnim |
| | | if (activeSkillTracks.Count == 0) |
| | | playingSkillAnim = false; |
| | | { |
| | | playingSkillWithAnim = false; |
| | | playingSkill = false; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | RemoveAction(frameHandler); |
| | | return; |
| | |
| | | } |
| | | |
| | | if (activeSkillTracks.Count == 0) |
| | | playingSkillAnim = false; |
| | | { |
| | | playingSkill = false; |
| | | playingSkillWithAnim = false; |
| | | } |
| | | return; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | if (activeSkillTracks.Count == 0) |
| | | playingSkillAnim = false; |
| | | { |
| | | playingSkillWithAnim = false; |
| | | playingSkill = false; |
| | | } |
| | | return; |
| | | } |
| | | } |
| | |
| | | |
| | | // 只有当没有其他活跃技能时才复位 playingSkillAnim |
| | | if (activeSkillTracks.Count == 0) |
| | | playingSkillAnim = false; |
| | | { |
| | | playingSkill = false; |
| | | } |
| | | |
| | | RemoveAction(frameHandler); |
| | | onComplete?.Invoke(); |
| | | skillBase.OnFinalFrameEnd(); |
| | | if (hasAnim) |
| | | { |
| | | playingSkillWithAnim = false; |
| | | skillTrack = null; |
| | | } |
| | | } |
| | | } |
| | | }; |
| | |
| | | if (entry == null) |
| | | { |
| | | // playingSkillAnim || animState == null |
| | | Debug.LogError("SetControledAnimation PlayAnimation hit failed : reason : " + (playingSkillAnim ? "playingSkillAnim" : "animState == null")); |
| | | Debug.LogError("SetControledAnimation PlayAnimation hit failed : reason : " + (playingSkill ? "playingSkillAnim" : "animState == null")); |
| | | return; |
| | | } |
| | | |
| | |
| | | currentTrack = null; |
| | | |
| | | |
| | | playingSkillAnim = false; |
| | | playingSkill = false; |
| | | PlayAnimation(MotionName.idle, true); |
| | | } |
| | | |
| | |
| | | currentTrack = null; |
| | | |
| | | // 5. 重置所有状态标志 |
| | | playingSkillAnim = false; |
| | | playingSkill = false; |
| | | isUnderControl = false; |
| | | |
| | | // 6. 重置时间相关字段(关键!) |
| | |
| | | } |
| | | } |
| | | |
| | | public bool CanCastSkill() |
| | | public bool CanCastSkill(SkillConfig skillConfig) |
| | | { |
| | | // 上次释放的技能 释放结束了没有 |
| | | return !playingSkillAnim; |
| | | return !playingSkillWithAnim || string.IsNullOrEmpty(skillConfig.SkillMotionName); |
| | | } |
| | | |
| | | public bool CanStartDeath() |
| | | { |
| | | return !playingSkillWithAnim; |
| | | } |
| | | } |