| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 | using Common.Utility.CombatEvent;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()        {            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);            }            return finishAngle / 360f;        }        public float GetFinishAngle()        {            if (SkillBasic == null)            {                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);            }            return 360f - finishAngle;        }        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)        {            if (SkillBasic != null)            {                                TriggerSkillSlotsEventData triggerSkillSlotsEventData= TriggerSkillSlotsEventData.Create();                triggerSkillSlotsEventData.SkillBasic = SkillBasic;                triggerSkillSlotsEventData.SkillSlots = this;                triggerSkillSlotsEventData.triggerType= triggerType;                CombatEventManager.Instance.Dispatch(CombatEventType.TriggerSkillSlots, triggerSkillSlotsEventData);                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;            }            useTriggerType = triggerType;            skillTurntable.TriggerSlots(this, triggerType);        }        public void Replace()        {            if (SkillBasic != null)            {                SkillBasic.Replace();            }            SkillBasic = null;        }        public void ActiveSkill()        {            if (SkillBasic != null)            {                SkillBasic.ActiveSkill();            }        }    }}
 |