using System.Collections.Generic; using Common.Utility.CombatEvent; using Excel2Json; using Fort23.Core; using Fort23.Mono; using Fort23.UTool; using GameLogic.Combat.CombatTool; using GameLogic.Combat.Hero.Turntable; using GameLogic.Combat.Skill; using GameLogic.Hero; using GameLogic.Player; using UnityEngine; namespace GameLogic.Combat.Hero { public class CombatHeroSkillControl : CombatHeroSkillControlBasic { /// /// 技能指令,0表示没有技能; /// private BetterList SkillCommands = new BetterList(); public int useSkillCount { get { return SkillCommands.size; } } /// /// 当前能使用的技能 /// public SkillBasic currUseSkill; /// /// 大道技能 /// public SkillBasic taoismSkillBasic; // public float NormalAttSpeedScale; // public BetterList // public BetterList _skillQueue = new BetterList(); // public BetterList _removeSkillBasic = new BetterList(); // private float _removeTime; public SkillTurntable SkillTurntable; protected override async CTask ProInit() { SkillTurntable = new SkillTurntable(); SkillTurntable.Init(10, this, _combatHeroEntity); if (_combatHeroEntity.IsEnemy) { await SetNewSkill(_combatHeroEntity.CurrCombatHeroInfo.unLockSkills.ToArray()); } else { await SetNewSkill(PlayerManager.Instance.GongFaControl.allUseSkill); } InitTaoismSkill(_combatHeroEntity.CurrCombatHeroInfo.TaoismSkillId); } public void InitTaoismSkill(int TaoismSkillId) { if (taoismSkillBasic != null) { taoismSkillBasic.Dispose(); } int id = TaoismSkillId; if (id != 0) { SkillConfig skillConfig = ConfigComponent.Instance.Get(id); SkillBasic skillBasic = SkillScriptManager.Instance.CreateSkillBasic(skillConfig); if (skillBasic == null) { return; } SkillInfo skillInfo = new SkillInfo(id, 1); skillBasic.InitSkillConfig(_combatHeroEntity, skillInfo); taoismSkillBasic = skillBasic; TaoismSkillAlterEventData taoismSkillAlterEventData = TaoismSkillAlterEventData.Create(); taoismSkillAlterEventData.CombatHeroEntity = _combatHeroEntity; CombatEventManager.Instance.Dispatch(CombatEventType.TaoismSkillAlter, taoismSkillAlterEventData); } } public override async CTask SetNewSkill(SkillInfo[] allSkill) { await SkillTurntable.SetNewSkill(allSkill); } public SkillBasic GetSkillQueueForIndex(int index) { return SkillTurntable.GetSkillQueueForIndex(index); } public void AddCommandSkill(SkillBasic skill) { SkillCommands.Add(skill); } public void RemoveCommandSkill(SkillBasic skill) { SkillCommands.Remove(skill); } public void ClearCommandSkill() { SkillCommands.Clear(); } public void UseSkillFinish(SkillBasic skill) { if (skill == null) { return; } SkillTurntable.UseSkillFinish(skill); } public void UseSkill(SkillBasic skill) { CombatUseSkillEventData combatUseSkillEventData = CombatUseSkillEventData.Create(); combatUseSkillEventData.useSkill = skill; CombatEventManager.Instance.Dispatch(CombatEventType.UseSkill, combatUseSkillEventData); currUseSkill = skill; skill.UseSkill(); } /// /// 判断是否有技能可释放 /// /// public SkillBasic CanReleaseSkill() { // if (_combatHeroEntity.IsControl()) // { // return null; // } if (!_combatHeroEntity.IsEnemy && _combatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero) { return null; } SkillBasic skillBasic = null; for (int i = 0; i < SkillCommands.size; i++) { skillBasic = SkillCommands[i]; break; } return skillBasic; } protected override void ProUpdate(float t) { if (CombatController.currActiveCombat.IsFightState) { float speed = _combatHeroEntity.CurrCombatHeroInfo.GetAttSpeed; SkillTurntable.Update(t, 1 * speed); } if (taoismSkillBasic != null) { taoismSkillBasic.CombatUpdate(t); } } public virtual void Dispose() { _combatHeroEntity = null; currUseSkill = null; } public virtual void ProDormancyObj() { for (int i = 0; i < allSkill.size; i++) { SkillBasic skillBasic = allSkill[i]; CObjectPool.Instance.Recycle(skillBasic); } allSkill.Clear(); SkillCommands.Clear(); } } }