| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 | using Common.Utility.CombatEvent;using Excel2Json;using Fort23.Core;using GameLogic.Combat.Buff;using GameLogic.Combat.Skill;using GameLogic.Hero;using GameLogic.Player;using UnityEngine;namespace GameLogic.Combat.Hero.Turntable{    public class SkillTurntable    {        public BetterList<SkillSlots> allSkillSlots = new BetterList<SkillSlots>();        protected CombatHeroSkillControl combatHeroSkillControl;        public CombatHeroEntity CombatHeroEntity        {            get { return _combatHeroEntity; }        }        protected CombatHeroEntity _combatHeroEntity;        public BetterList<SkillBasic> _removeSkillBasic = new BetterList<SkillBasic>();        private float _removeTime;        private BetterList<SkillBasic> currUseFinishSkill = new BetterList<SkillBasic>();        public float skillAddSkillCd;        public int skillCount;        public bool isStop;        public void Init(int count, CombatHeroSkillControl combatHeroSkillControl, CombatHeroEntity combatHeroEntity)        {            this.combatHeroSkillControl = combatHeroSkillControl;            _combatHeroEntity = combatHeroEntity;            for (int i = 0; i < count; i++)            {                SkillSlots skillSlots = new SkillSlots();                skillSlots.Init(i, this);                allSkillSlots.Add(skillSlots);            }        }        public SkillBasic GetSkillQueueForIndex(int index)        {            if (index < 0 || index >= allSkillSlots.Count)            {                return null;            }            return allSkillSlots[index].SkillBasic;        }        public void UseSkillFinish(SkillBasic skillBasic)        {            if (currUseFinishSkill.Contains(skillBasic))            {                return;            }            DS60103 ds60103 =                _combatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>().taoismSkillBasic as DS60103;            if (ds60103 != null)            {                currUseFinishSkill.Add(skillBasic);            }            UseSkillFinishEventData useSkillFinishEventData = UseSkillFinishEventData.Create();            useSkillFinishEventData.SkillBasic = skillBasic;            CombatEventManager.Instance.Dispatch(CombatEventType.UseSkillFinish, useSkillFinishEventData);        }        public async CTask SetNewSkill(SkillInfo[] allSkill)        {            currUseFinishSkill.Clear();            CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();            for (int i = 0; i < allSkillSlots.Count; i++)            {                SkillBasic skillBasic = allSkillSlots[i].SkillBasic;                allSkillSlots[i].Replace();                if (skillBasic != null)                {                    _removeSkillBasic.Add(skillBasic);                }            }            _removeTime = 0;            skillAddSkillCd = 0;            skillCount = 0;            if (allSkill != null)            {                for (int i = 0; i < allSkill.Length; i++)                {                    SkillInfo skillInfo = allSkill[i];                    if (skillInfo == null)                    {                        continue;                    }                    SkillConfig skillConfig = skillInfo.skillConfig;                    SkillBasic skillBasic = combatHeroSkillControl.AddSkill(skillInfo);                    if (skillBasic == null)                    {                        continue;                    }                    if (skillConfig.SkillType == 1)                    {                        skillCount++;                    }                    skillAddSkillCd += skillConfig.addcd;                    SetSkill(skillInfo.index, skillBasic);                    if (!string.IsNullOrEmpty(skillConfig.scriptName))                    {                        cTaskAwaitBuffer.AddTask(AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>(                            skillConfig.timelineName + ".txt",                            delegate(AssetHandle handle)                            {                                if (handle != null)                                {                                    TextAsset textAsset = handle.AssetObject<TextAsset>();                                    TimeLienData timeLienData = JsonManager.FromJson<TimeLienData>(textAsset.text);                                    timeLienData.DeserializeData();                                    handle.Release();                                    _combatHeroEntity.combatHeroTimeLineControl.AddTimeLienData(timeLienData);                                }                            }));                    }                }            }            await cTaskAwaitBuffer.WaitAll();            for (int i = 0; i < allSkillSlots.Count; i++)            {                SkillSlots skillBasic = allSkillSlots[i];                skillBasic.ActiveSkill();            }            CombatEventManager.Instance.Dispatch(CombatEventType.ExercisesAlter, null);        }        public void SetSkill(int index, SkillBasic skillBasic)        {            allSkillSlots[index].SetSkill(skillBasic);        }        public void TriggerSlots(SkillSlots skillSlots, int triggerType)        {            SkillBasic skillBasic = skillSlots.SkillBasic;            if (skillBasic == null)            {                for (int i = 0; i < currUseFinishSkill.Count; i++)                {                    SkillBasic dengDaiSkill = currUseFinishSkill[i];                    bool isOk = false;                    switch (dengDaiSkill.wuXingType)                    {                        case WuXingType.Gold:                            if (triggerType == 0)                            {                                isOk = true;                            }                            break;                        case WuXingType.Water:                            if (triggerType == 1)                            {                                isOk = true;                            }                            break;                        case WuXingType.Wood:                            if (triggerType == 2)                            {                                isOk = true;                            }                            break;                        case WuXingType.Fire:                            if (triggerType == 3)                            {                                isOk = true;                            }                            break;                        case WuXingType.Earth:                            if (triggerType == 4)                            {                                isOk = true;                            }                            break;                    }                    if (isOk)                    {                        skillSlots.SetSkill(dengDaiSkill);                        currUseFinishSkill.RemoveAt(i);                        FillInSkillSlotsEventData fillInSkillSlotsEventData = FillInSkillSlotsEventData.Create();                        fillInSkillSlotsEventData.SkillBasic = dengDaiSkill;                        fillInSkillSlotsEventData.SkillSlots = skillSlots;                        CombatEventManager.Instance.Dispatch(CombatEventType.FillInSkillSlots,                            fillInSkillSlotsEventData);                        return;                    }                }                return;            }            if (skillBasic.SelfSkillConfig.SkillType != 1)            {                return;            }            b_1025 b1025 = CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1025>();            if (b1025 != null)            {                return;            }            // if (skillBasic.wuXingType.HasFlag(WuXingType.Gold))            // {            //     int odds = Random.Range(0, 100);            //     if (odds < 50)            //     {            //         _combatHeroEntity.CurrCombatHeroInfo.Water_Injury -= Random.Range(2, 5);            //         if (_combatHeroEntity.CurrCombatHeroInfo.Water_Injury < 0)            //         {            //             _combatHeroEntity.CurrCombatHeroInfo.Water_Injury = 0;            //         }            //     }            // }            //            // if (skillBasic.wuXingType.HasFlag(WuXingType.Wood))            // {            //     int odds = Random.Range(0, 100);            //     if (odds < 50)            //     {            //         _combatHeroEntity.CurrCombatHeroInfo.Fire_Injury -= Random.Range(2, 5);            //         if (_combatHeroEntity.CurrCombatHeroInfo.Fire_Injury < 0)            //         {            //             _combatHeroEntity.CurrCombatHeroInfo.Fire_Injury = 0;            //         }            //     }            // }            //            // if (skillBasic.wuXingType.HasFlag(WuXingType.Water))            // {            //     int odds = Random.Range(0, 100);            //     if (odds < 50)            //     {            //         _combatHeroEntity.CurrCombatHeroInfo.Wood_Injury -= Random.Range(2, 5);            //         if (_combatHeroEntity.CurrCombatHeroInfo.Wood_Injury < 0)            //         {            //             _combatHeroEntity.CurrCombatHeroInfo.Wood_Injury = 0;            //         }            //     }            // }            //            // if (skillBasic.wuXingType.HasFlag(WuXingType.Fire))            // {            //     int odds = Random.Range(0, 100);            //     if (odds < 50)            //     {            //         _combatHeroEntity.CurrCombatHeroInfo.Earth_Injury -= Random.Range(2, 5);            //         if (_combatHeroEntity.CurrCombatHeroInfo.Earth_Injury < 0)            //         {            //             _combatHeroEntity.CurrCombatHeroInfo.Earth_Injury = 0;            //         }            //     }            // }            //            // if (skillBasic.wuXingType.HasFlag(WuXingType.Earth))            // {            //     int odds = Random.Range(0, 100);            //     if (odds < 50)            //     {            //         _combatHeroEntity.CurrCombatHeroInfo.Metal_Injury -= Random.Range(2, 5);            //         if (_combatHeroEntity.CurrCombatHeroInfo.Metal_Injury < 0)            //         {            //             _combatHeroEntity.CurrCombatHeroInfo.Metal_Injury = 0;            //         }            //     }            // }            if (!_combatHeroEntity.IsCantAddGongFa())            {                return;            }            DS60103 ds60103 =                _combatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>().taoismSkillBasic as DS60103;            if (ds60103 != null)            {                skillSlots.SetSkill(null);            }            skillSlots.useCount++;            combatHeroSkillControl.AddCommandSkill(skillBasic);            AddUseGongFaEventData addUseGongFaEventData = AddUseGongFaEventData.Create();            addUseGongFaEventData.SkillBasic = skillBasic;            addUseGongFaEventData.SkillSlots = skillSlots;            CombatEventManager.Instance.Dispatch(CombatEventType.AddUseGongFa, addUseGongFaEventData);        }        public void Update(float t, float angle)        {            if (_removeSkillBasic.Count > 0)            {                _removeTime += t;                if (_removeTime > 10)                {                    for (int i = 0; i < _removeSkillBasic.Count; i++)                    {                        _removeSkillBasic[i].Dispose();                    }                    _removeSkillBasic.Clear();                }            }            if (!isStop)            {                for (int i = 0; i < allSkillSlots.Count; i++)                {                    SkillSlots skillSlots = allSkillSlots[i];                    skillSlots.AddAngle(angle);                }            }        }    }}
 |