using System.Collections.Generic;
using Common.Combat.FxAILogic;
using Core.Triiger;
using Fort23.Core;
using UnityEngine;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill.MagicSkill
{
public class S3401FxMove : CObject
{
public Vector3 endPos;
public FxAILogicBasic fxAILogicBasic;
public float moveSpeed = 8;
private System.Action finishCallBack;
private bool isUpdate;
public void InitActive(System.Action finishCallBack)
{
this.finishCallBack = finishCallBack;
isUpdate = true;
}
public override void ActiveObj()
{
}
public override void DormancyObj()
{
fxAILogicBasic = null;
isUpdate = false;
}
public void Update(float t)
{
if (!isUpdate)
{
return;
}
Vector3 pos = fxAILogicBasic.gameObject.transform.position;
Vector3 dir = endPos - pos;
float distance = dir.magnitude;
float addT = 1.0f / (distance / moveSpeed);
float moveTime = t * addT;
Vector3 d = Vector3.Lerp(pos, endPos, moveTime);
fxAILogicBasic.gameObject.transform.position = d;
if (moveTime >= 1)
{
fxAILogicBasic.Dispose();
finishCallBack?.Invoke();
}
}
}
///
/// 宝塔在英雄的头顶前往位置旋转,形成一个扇形区域,敌人的功法如果进入这个扇形区域有很大的概率被法宝吸收
///(飞到玩家头顶持续施法)
/// 100%吸收,切吸收后临时增加玩家对于吸收功法的灵根
///
public class S3401 : MagicSkillBasic
{
private List _currTriggerFx = new List();
private float _currTime;
private bool _isUpdae;
protected override void ProMagicUseSkill()
{
}
protected override void MagicSkillUpdate(float time)
{
if (!_isUpdae)
{
return;
}
_currTime += time;
for (int i = 0; i < _currTriggerFx.Count; i++)
{
S3401FxMove fxMove = _currTriggerFx[i];
fxMove.Update(time);
}
}
protected override void ProSkillPlayFinish()
{
_isUpdae = false;
for (int i = 0; i < _currTriggerFx.Count; i++)
{
S3401FxMove fxMove = _currTriggerFx[i];
CObjectPool.Instance.Recycle(fxMove);
}
_currTriggerFx.Clear();
}
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.isNotMove = true;
S3401FxMove fxMove = CObjectPool.Instance.Fetch();
fxMove.fxAILogicBasic = fxAILogicBasic;
fxMove.InitActive(null);
_currTriggerFx.Add(fxMove);
}
}
}
}