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; /// /// 触发的次数 /// public int triggerCount; // public int useCount; /// /// 金、水、木、火、土 /// private int[] triggerAngle = new[] { 0, 72, 144, 216, 288 }; private SkillTurntable skillTurntable; 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(); } 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); } 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) { 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(); } } } }