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();
}
}
}
}