| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | using Core.Triiger;using Fort23.UTool;using UnityEngine;using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;namespace UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic{    public class TimeLineAlertLogic : TimeLineEventLogicBasic,ITriggerEntity    {        private IUnRegister _enterRegister;        private IUnRegister _exitRegister;        protected GameObject _gameObject;        private GameObjectPool _newGameObjectPool;        private TimeLineAlertSeriailztion timeLineAlertSeriailztion;        protected bool isManualClose;        protected override void ProSetCombatInfo()        {        }        protected override void ProDormancyObj()        {        }        public override bool IsFinish()        {            return !isManualClose;        }        protected override void ProEnter()        {                      _enterRegister?.UnRegister();            _exitRegister?.UnRegister();            _enterRegister = null;            _exitRegister = null;            timeLineAlertSeriailztion =                mTimeLineAssetSerialization as TimeLineAlertSeriailztion;            isManualClose = timeLineAlertSeriailztion.manualClose;            if (!string.IsNullOrEmpty(timeLineAlertSeriailztion.guid))            {                SpecialDotInfo specialDotInfo = castEntity.GetMainHotPoin<ILifetCycleHitPoint>(true)                    .GetSpecialDotInfo(timeLineAlertSeriailztion.guid);                GameObject gameObject = specialDotInfo.targetTran.gameObject;                gameObject.SetActive(false);                if (timeLineAlertSeriailztion.isNew)                {                    string poolName = castEntity.guidName + timeLineAlertSeriailztion.groupName +                                      timeLineAlertSeriailztion.guid;                    _newGameObjectPool =                        GObjectPool.Instance.FetchAsyncForGameObject<GameObjectPool>(gameObject, poolName);                    _gameObject = _newGameObjectPool.own;                    _gameObject.transform.position = gameObject.transform.position;                }                else                {                    _gameObject = gameObject;                }                _enterRegister = _gameObject.OnTriggerEnterEvent(this,OnTriggerEnterEvent);                _exitRegister = _gameObject.OnTriggerExitEvent(this,OnTriggerExitEvent);                ITimeLineAlertTargetEnter timeLineAlertTarget =                    _timeLineTriggerEntity as ITimeLineAlertTargetEnter;                if (timeLineAlertTarget != null)                {                    timeLineAlertTarget.InitAlert(timeLineAlertSeriailztion, _gameObject);                }                _gameObject.SetActive(true);            }        }        protected void OnTriggerEnterEvent(Collider collider,ITriggerEntity triggerEntity)        {            TimeLineAlertSeriailztion timeLineAlertSeriailztion =                mTimeLineAssetSerialization as TimeLineAlertSeriailztion;            ITimeLineAlertTargetEnter timeLineAlertTarget =                _timeLineTriggerEntity as ITimeLineAlertTargetEnter;            if (timeLineAlertTarget != null)            {                ExitEventGameObject exitEventGameObject = collider.gameObject.GetOrAddComponent<ExitEventGameObject>();                exitEventGameObject.Collider = collider;                exitEventGameObject.iTriggerEntity = triggerEntity;                exitEventGameObject.OnCollisionExitEvent = (OnTriggerExitEvent);                timeLineAlertTarget.Enter(timeLineAlertSeriailztion, collider, _gameObject);            }        }        protected void OnTriggerExitEvent(Collider collider,ITriggerEntity triggerEntity)        {            TimeLineAlertSeriailztion timeLineAlertSeriailztion =                mTimeLineAssetSerialization as TimeLineAlertSeriailztion;            ITimeLineAlertTargetEnter timeLineAlertTarget =                _timeLineTriggerEntity as ITimeLineAlertTargetEnter;            if (timeLineAlertTarget != null)            {                ExitEventGameObject exitEventGameObject = collider.gameObject.GetOrAddComponent<ExitEventGameObject>();                if (exitEventGameObject.OnCollisionExitEvent == null)                {                    return;                }                exitEventGameObject.Collider = null;                exitEventGameObject.OnCollisionExitEvent = null;                timeLineAlertTarget.Leave(timeLineAlertSeriailztion, collider, _gameObject);            }        }        protected override void ProLeave()        {            TimeLineAlertSeriailztion timeLineAlertSeriailztion =                mTimeLineAssetSerialization as TimeLineAlertSeriailztion;            if (timeLineAlertSeriailztion.manualClose)            {                return;            }            ClearTrigger();        }        protected override void ProTimeUpdate()        {            // if (_gameObject != null)            // {            //     if (timeLineAlertSeriailztion.isFixedPoint)            //     {            //                     //     }            // }        }        protected override void ProBreakTimeLine()        {            isManualClose = false;            ClearTrigger();        }        protected void ClearTrigger()        {            if (_gameObject != null)            {                _gameObject.SetActive(false);                ITimeLineAlertTargetEnter timeLineAlertTarget =                    _timeLineTriggerEntity as ITimeLineAlertTargetEnter;                if (timeLineAlertTarget != null)                {                    timeLineAlertTarget.LeaveAlert(timeLineAlertSeriailztion, _gameObject);                }            }            GObjectPool.Instance.Recycle(_newGameObjectPool);            _enterRegister?.UnRegister();            _exitRegister?.UnRegister();            _enterRegister = null;            _exitRegister = null;            _newGameObjectPool = null;            _gameObject = null;        }        protected override void ProDispose()        {            ClearTrigger();        }        public string tag { get; }    }}
 |