| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 | using Common.Utility.CombatEvent;using GameLogic.Combat.Buff;using GameLogic.Combat.Skill;using GameLogic.Player;namespace GameLogic.Combat.Hero.Turntable{    public class SkillSlots    {        public SkillBasic SkillBasic;        public int index;        public float angle;        public int useCount;        public int useTriggerType;        private int triggerType = -1;        /// <summary>        /// 触发的次数        /// </summary>        public int triggerCount;        // public int useCount;        /// <summary>        /// 金、水、木、火、土        /// </summary>        private int[] triggerAngle = new[] { 0, 72, 144, 216, 288 };        private SkillTurntable skillTurntable;        private int currTriggerTypeIndex;        public void Init(int index, SkillTurntable skillTurntable)        {            this.index = index;            angle = index * 36;            this.skillTurntable = skillTurntable;        }        public void SetSkill(SkillBasic SkillBasic)        {            triggerCount = 0;            this.SkillBasic = SkillBasic;            if (SkillBasic != null)            {                SkillBasic.index = index;                SkillBasic.AddToSkillSlots();            }            if (SkillBasic != null)            {                switch (SkillBasic.wuXingType)                {                    case WuXingType.Gold:                        currTriggerTypeIndex = 0;                        break;                    case WuXingType.Water:                        currTriggerTypeIndex = 1;                        break;                    case WuXingType.Wood:                        currTriggerTypeIndex = 2;                        break;                    case WuXingType.Fire:                        currTriggerTypeIndex = 3;                        break;                    case WuXingType.Earth:                        currTriggerTypeIndex = 4;                        break;                }            }            SkillSlotsAlterEventData skillSlotsAlterEventData = SkillSlotsAlterEventData.Create();            skillSlotsAlterEventData.SkillSlots = this;            skillSlotsAlterEventData.SkillBasic = SkillBasic;            CombatEventManager.Instance.Dispatch(CombatEventType.SkillSlotsAlter, skillSlotsAlterEventData);        }        public void AddAngle(float addAngle)        {            int c = (int)(addAngle / 2);            float d = addAngle % 2;            for (int i = 0; i < c; i++)            {                Angle(2);            }            Angle(d);        }        public float GetFinishBl()        {            if (!SkillBasic.isActive)            {                return 0;            }            float v = angle % 360;            int targetAngle = triggerAngle[currTriggerTypeIndex];            float jd = v;            if (targetAngle == 0)            {                targetAngle = 360;            }            float finishAngle = 0;            if (jd < targetAngle)            {                finishAngle = 360 - (targetAngle - jd);            }            else            {                finishAngle = (jd - targetAngle);            }            float allT = SkillBasic.SelfSkillConfig.cd * 360;            return (finishAngle + triggerCount * 360) / allT;        }        public float GetFinishAngle()        {            if (SkillBasic == null || !SkillBasic.isActive)            {                return int.MaxValue;            }            float v = angle % 360;            int targetAngle = triggerAngle[currTriggerTypeIndex];            float jd = v;            if (targetAngle == 0)            {                targetAngle = 360;            }            float finishAngle = 0;            if (jd < targetAngle)            {                finishAngle = 360 - (targetAngle - jd);            }            else            {                finishAngle = (jd - targetAngle);            }            float allT = SkillBasic.SelfSkillConfig.cd * 360;            return allT - (finishAngle + triggerCount * 360);        }        private void Angle(float addAngle)        {            angle += addAngle;            float v = angle % 360;            for (int i = 0; i < triggerAngle.Length; i++)            {                if (triggerType == i)                {                    continue;                }                float jd = v;                int a = triggerAngle[i];                int max = a + 2;                int min = a - 2;                if (min < 0)                {                    jd -= 360;                }                if (jd <= max && jd >= min)                {                    triggerType = i;                    Trigger(triggerType);                    break;                }            }        }        private void Trigger(int triggerType)        {            switch (triggerType)            {                case 0:                    b_1019 b1019 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1019>();                    if (b1019 != null)                    {                        return;                    }                    break;                case 1:                    b_1021 b_1021 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1021>();                    if (b_1021 != null)                    {                        return;                    }                    break;                case 2:                    b_1020 b1020 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1020>();                    if (b1020 != null)                    {                        return;                    }                    break;                case 3:                    b_1022 b_1022 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1022>();                    if (b_1022 != null)                    {                        return;                    }                    break;                case 4:                    b_1023 b_1023 = skillTurntable.CombatHeroEntity.BuffControl.GetBuffBasicForType<b_1023>();                    if (b_1023 != null)                    {                        return;                    }                    break;            }            if (SkillBasic != null)            {                if (!SkillBasic.IsCanTriggerSkillSlots())                {                    return;                }                switch (SkillBasic.wuXingType)                {                    case WuXingType.Gold:                        if (triggerType != 0)                        {                            return;                        }                        break;                    case WuXingType.Water:                        if (triggerType != 1)                        {                            return;                        }                        break;                    case WuXingType.Wood:                        if (triggerType != 2)                        {                            return;                        }                        break;                    case WuXingType.Fire:                        if (triggerType != 3)                        {                            return;                        }                        break;                    case WuXingType.Earth:                        if (triggerType != 4)                        {                            return;                        }                        break;                }                triggerCount++;                if (triggerCount < SkillBasic.SelfSkillConfig.cd)                {                    return;                }                triggerCount = 0;                TriggerSkillSlotsEventData triggerSkillSlotsEventData = TriggerSkillSlotsEventData.Create();                triggerSkillSlotsEventData.SkillBasic = SkillBasic;                triggerSkillSlotsEventData.SkillSlots = this;                triggerSkillSlotsEventData.triggerType = triggerType;                CombatEventManager.Instance.Dispatch(CombatEventType.TriggerSkillSlots, triggerSkillSlotsEventData,                    false);                if (triggerSkillSlotsEventData.isNotUseSkill)                {                    triggerSkillSlotsEventData.Recycle();                    return;                }                triggerSkillSlotsEventData.Recycle();            }            useTriggerType = triggerType;            skillTurntable.TriggerSlots(this, triggerType);        }        public void Replace()        {            if (SkillBasic != null)            {                SkillBasic.Replace();            }            SkillBasic = null;        }        public void ActiveSkill()        {            if (SkillBasic != null)            {                SkillBasic.ActiveSkill();            }        }        public void Dispose()        {            if (SkillBasic != null)            {                SkillBasic.Dispose();            }        }    }}
 |