using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
using UnityEngine;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill.MagicSkill
{
///
/// 一盏明灯围绕玩家,{0}秒内抵消所有负面效果,每{1}秒触发1次。
///
public class S3302 : MagicSkillBasic
{
private CombatHeroEntity target;
private bool isUpdate = false;
private float _currTime;
private float _jiaoDu;
private Vector3 _dir;
private Transform root;
private float _lasetAddTime = -255;
private int _AddCount;
protected override void ProMagicUseSkill()
{
TimeLineEventLogicGroupBasic timeLineEventLogicGroupBasic = ActivationTimeLineData("sk1_xiaoshi");
timeLineEventLogicGroupBasic.TimeLineUpdateEnd = delegate()
{
root = CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.GameObject.transform;
_dir = Vector3.forward * 3;
Vector3 d = root.rotation * _dir;
CombatHeroEntity.GameObject.transform.position = d + root.position;
TimeLineEventLogicGroupBasic sk1_show = ActivationTimeLineData("sk1_show");
sk1_show.TimeLineUpdateEnd = ShowFinish;
};
CombatEventManager.Instance.AddEventListener(CombatEventType.StartAddBuff, StartAddBuff);
}
private void StartAddBuff(IEventData eventData)
{
StartAddBuffEventData startAddBuffEventData = eventData as StartAddBuffEventData;
if (startAddBuffEventData.target == CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity)
{
BuffInfo buffInfo = startAddBuffEventData.BuffInfo;
if (buffInfo.BuffConfig.buffType != 2)
{
return;
}
float t = CombatController.currActiveCombat.combatTime;
float v = t - _lasetAddTime;
if (v < effectValue[1] && _AddCount >= 1)
{
return;
}
if (v > effectValue[1])
{
_lasetAddTime = t;
_AddCount = 0;
}
_AddCount++;
startAddBuffEventData.isNotAddBuff = true;
}
}
private void ShowFinish()
{
isUpdate = true;
_currTime = 0;
}
protected override void MagicSkillUpdate(float time)
{
if (!isUpdate)
{
return;
}
_currTime += time;
if (_currTime >= SelfSkillConfig.effectValue[0])
{
SkillPlayFinish();
isUpdate = false;
return;
}
_jiaoDu += 360 * time * 0.5f;
Quaternion quaternionY = Quaternion.Euler(0, _jiaoDu, 0);
Vector3 d = root.rotation * quaternionY * _dir;
CombatHeroEntity.GameObject.transform.position = d + root.position;
}
protected override void ProBreakMagicSkill()
{
SkillPlayFinish();
isUpdate = false;
}
protected override void ProSkillPlayFinish()
{
CombatEventManager.Instance.RemoveEventListener(CombatEventType.StartAddBuff, StartAddBuff);
}
protected override ILifetCycleHitPoint[] ProGetTineLineTargetEntity(
TimeLineEventLogicBasic timeLineEventLogicBasic)
{
ILifetCycleHitPoint[] lifetCycleHitPoints = new ILifetCycleHitPoint[1];
lifetCycleHitPoints[0] = target.GetMainHotPoin();
return lifetCycleHitPoints;
}
}
}