| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | 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    {        /// <summary>        /// 技能指令,0表示没有技能;        /// </summary>        private BetterList<SkillBasic> SkillCommands = new BetterList<SkillBasic>();        public SkillBasic[] GetSkillQueue()        {            return SkillCommands.ToArray(true);        }        public int useSkillCount        {            get { return SkillCommands.size; }        }        /// <summary>        /// 当前能使用的技能        /// </summary>        public SkillBasic currUseSkill;        /// <summary>        /// 大道技能        /// </summary>        public SkillBasic taoismSkillBasic;        // public float NormalAttSpeedScale;        // public BetterList<SkillSlots>        // public BetterList<SkillBasic> _skillQueue = new BetterList<SkillBasic>();        // public BetterList<SkillBasic> _removeSkillBasic = new BetterList<SkillBasic>();        // 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<SkillConfig>(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();        }        /// <summary>        /// 判断是否有技能可释放        /// </summary>        /// <returns></returns>        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();        }    }}
 |