using System.Collections.Generic;
using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using Common.Combat.FxAILogic;
using Core.Triiger;
using GameLogic.Combat.CombatTool;
using UnityEngine;
namespace GameLogic.Combat.Skill.MagicSkill
{
///
/// 法宝技能 翡翠葫芦 战场区域形成一个域。敌人的功法弹道进入域后将降低敌人的功法弹道速度
///
public class S3201 : MagicSkillBasic, ITriggerEntity
{
private List _fxAILogicBasics = new List();
private float _currTime;
private bool _update;
private IUnRegister _unRegister;
private IUnRegister _unRegisterExitEvent;
private CombatHeroEntity target;
protected Vector3 fxPlayPos;
protected Vector3 dir;
private TimeLineEventLogicGroupBasic loopFx;
// protected Vector3 startEulerAngles;
protected Quaternion endEulerAngles;
private SpecialDotInfo specialDotInfo;
// private List
protected override void ProMagicUseSkill()
{
CombatHeroEntity[] allHero =
CombatController.currActiveCombat.CombatHeroController.GetHero(!CombatHeroEntity.IsEnemy);
if (allHero == null || allHero.Length <= 0)
{
SkillPlayFinish();
return;
}
target = allHero[0];
Vector3 rootPos = CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.dotPos;
Vector3 targetPos = target.dotPos;
dir = (targetPos - rootPos);
fxPlayPos =dir * 0.5f + rootPos;
dir= dir.normalized;
Vector3 newTargetPos = fxPlayPos + new Vector3(1, 5, 0);
endEulerAngles= Quaternion.LookRotation((fxPlayPos-newTargetPos).normalized)*Quaternion.Euler(new Vector3(80,0,0));
MoveToTargetPosShow magicAttShowBasic = InitMoveToTargetPosShow(newTargetPos, Finish);
SetMagicAttShowBasic(magicAttShowBasic);
}
private void OnTriggerExitEvent(Collider collider, ITriggerEntity triggerEntity)
{
if (triggerEntity == null)
{
return;
}
FxAILogicBasic fxAILogicBasic = triggerEntity as FxAILogicBasic;
if (fxAILogicBasic != null && fxAILogicBasic.CombatHeroEntity.IsEnemy != CombatHeroEntity.IsEnemy)
{
fxAILogicBasic.extraMoveSpeed += SelfSkillConfig.effectValue[0];
_fxAILogicBasics.Remove(fxAILogicBasic);
}
}
private void OnTriggerEnter(Collider collider, ITriggerEntity triggerEntity)
{
if (triggerEntity == null)
{
return;
}
FxAILogicBasic fxAILogicBasic = triggerEntity as FxAILogicBasic;
if (fxAILogicBasic != null && fxAILogicBasic.CombatHeroEntity.IsEnemy != CombatHeroEntity.IsEnemy)
{
fxAILogicBasic.extraMoveSpeed -= SelfSkillConfig.effectValue[0];
_fxAILogicBasics.Add(fxAILogicBasic);
}
}
protected override void MagicSkillUpdate(float time)
{
if (_update)
{
_currTime += time;
CombatHeroEntity.GameObject.transform.rotation =
Quaternion.Lerp(CombatHeroEntity.GameObject.transform.rotation, endEulerAngles, _currTime*2);
specialDotInfo.targetTran.position= fxPlayPos;
specialDotInfo.targetTran.forward = dir;
if (_currTime >= SelfSkillConfig.effectValue[1])
{
AllFinish();
}
}
}
private void AllFinish()
{
loopFx.CloseLoopFx();
ActivationTimeLineData("sk1_xiaoshi");
_unRegister?.UnRegister();
_unRegisterExitEvent?.UnRegister();
_unRegisterExitEvent = null;
_unRegister = null;
_update = false;
SkillPlayFinish();
for (int i = 0; i < _fxAILogicBasics.Count; i++)
{
_fxAILogicBasics[i].extraMoveSpeed += SelfSkillConfig.effectValue[0];
}
_fxAILogicBasics.Clear();
}
private void Finish()
{
loopFx = ActivationTimeLineData("sk1",customizePos: new Vector3[]{fxPlayPos});
// timeLineEventLogicGroupBasic.TimeLineUpdateEnd = () => { };
specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("lingyu");
specialDotInfo.targetTran.position= fxPlayPos;
specialDotInfo.targetTran.forward = dir;
_unRegister = specialDotInfo.targetTran.gameObject.OnTriggerEnterEvent(this, OnTriggerEnter);
_currTime = 0;
_update = true;
_unRegisterExitEvent = specialDotInfo.targetTran.gameObject.OnTriggerExitEvent(this, OnTriggerExitEvent);
}
public string tag { get; }
}
}