| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | using System;using Common.Utility.CombatEvent;using Excel2Json;using Fort23.UTool;using GameLogic.Combat.CombatTool;using GameLogic.Combat.Skill;using UnityEngine;namespace GameLogic.Combat.Hero{    public class CombatHeroSkillControl : IDisposable    {        private BetterList<SkillBasic> allSkill = new BetterList<SkillBasic>();        /// <summary>        /// 技能指令,0表示没有技能;        /// </summary>        private BetterList<SkillBasic> SkillCommands = new BetterList<SkillBasic>();        /// <summary>        /// 当前能使用的技能        /// </summary>        public SkillBasic currUseSkill;        private CombatHeroEntity _combatHeroEntity;        /// <summary>        /// 普攻        /// </summary>        public SkillBasic NormalAttack;        public float NormalAttCd;        public float NormalAttSpeedScale;        public void Init(CombatHeroEntity combatHeroEntity)        {            _combatHeroEntity = combatHeroEntity;            int[] skillId = _combatHeroEntity.CurrCombatHeroInfo.skillId;            if (skillId != null)            {                for (int i = 0; i < skillId.Length; i++)                {                    SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(skillId[i]);                    AddSkill(skillConfig);                }            }        }        public void AddSkill(SkillConfig skillConfig)        {            SkillBasic skillBasic = SkillScriptManager.Instance.CreateSkillBasic(skillConfig);            allSkill.Add(skillBasic);            skillBasic.InitSkill(_combatHeroEntity);            if (skillConfig.SkillType == 1)            {                NormalAttack = skillBasic;                NormalAttack.ActiveTimeLineGroupName = "attack";                SetNormalAttCd();            }        }        public void AddCommandSkill(SkillBasic skill)        {            SkillCommands.Add(skill);        }        public void RemoveCommandSkill(SkillBasic skill)        {            SkillCommands.Remove(skill);        }        public void ClearCommandSkill()        {            SkillCommands.Clear();        }        public void UseSkill(SkillBasic skill)        {            CombatUseSkillEventData combatUseSkillEventData = CombatUseSkillEventData.Create();            combatUseSkillEventData.useSkill = skill;            CombatEventManager.Instance.Dispatch(CombatEventType.UseSkill, combatUseSkillEventData);            currUseSkill = skill;            skill.UseSkill();            if (skill.SelfSkillConfig.SkillType == 1)            {                SetNormalAttCd();            }        }        /// <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;        }        public void Update(float t)        {            for (int i = 0; i < allSkill.size; i++)            {                SkillBasic skillBasic = allSkill[i];                skillBasic.CombatUpdate(t);                if (skillBasic.SelfSkillConfig.SkillType != 1 && !SkillCommands.Contains(skillBasic) &&                    currUseSkill != skillBasic)                {                    skillBasic.ReduceCd(t);                    if (skillBasic.SkillCd <= 0 && skillBasic.IsCanUse())                    {                        skillBasic.SkillCd = skillBasic.SkillMaxCd;                        AddCommandSkill(skillBasic);                    }                }            }            NormalAttCd -= t;            if (NormalAttCd <= 0 && !SkillCommands.Contains(NormalAttack))            {                AddCommandSkill(NormalAttack);            }        }        public void SetNormalAttCd()        {            if (NormalAttack == null)            {                return;            }            string timeLineName = "attack";            float maxTime = _combatHeroEntity.combatHeroTimeLineControl.TimeLineData.GetTimeLineEventLogicGroupForTime(                timeLineName, null);            float attackSpeed = _combatHeroEntity.CurrCombatHeroInfo.attSpeed.Value;            float cd = 1.0f / attackSpeed;            float attSpeed = (float)1;            if (cd < maxTime)            {                attSpeed = maxTime / cd;            }            NormalAttSpeedScale = attSpeed;            // Debug.Log(NormalAttSpeedScale);            NormalAttCd = cd;        }        public void Dispose()        {            for (int i = 0; i < allSkill.size; i++)            {                SkillBasic skillBasic = allSkill[i];                skillBasic.Dispose();            }            allSkill.Clear();            SkillCommands.Clear();            _combatHeroEntity = null;            NormalAttack = null;            currUseSkill = null;        }    }}
 |