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