using Core.Triiger; using Fort23.UTool; using UnityEngine; using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface; namespace UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic { public class TimeLineAlertLogic : TimeLineEventLogicBasic { 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(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(gameObject, poolName); _gameObject = _newGameObjectPool.own; _gameObject.transform.position = gameObject.transform.position; } else { _gameObject = gameObject; } _enterRegister = _gameObject.OnTriggerEnterEvent(OnTriggerEnterEvent); _exitRegister = _gameObject.OnTriggerExitEvent(OnTriggerExitEvent); ITimeLineAlertTargetEnter timeLineAlertTarget = _timeLineTriggerEntity as ITimeLineAlertTargetEnter; if (timeLineAlertTarget != null) { timeLineAlertTarget.InitAlert(timeLineAlertSeriailztion, _gameObject); } _gameObject.SetActive(true); } } protected void OnTriggerEnterEvent(Collider collider) { TimeLineAlertSeriailztion timeLineAlertSeriailztion = mTimeLineAssetSerialization as TimeLineAlertSeriailztion; ITimeLineAlertTargetEnter timeLineAlertTarget = _timeLineTriggerEntity as ITimeLineAlertTargetEnter; if (timeLineAlertTarget != null) { ExitEventGameObject exitEventGameObject = collider.gameObject.GetOrAddComponent(); exitEventGameObject.Collider = collider; exitEventGameObject.OnCollisionExitEvent = (OnTriggerExitEvent); timeLineAlertTarget.Enter(timeLineAlertSeriailztion, collider, _gameObject); } } protected void OnTriggerExitEvent(Collider collider) { TimeLineAlertSeriailztion timeLineAlertSeriailztion = mTimeLineAssetSerialization as TimeLineAlertSeriailztion; ITimeLineAlertTargetEnter timeLineAlertTarget = _timeLineTriggerEntity as ITimeLineAlertTargetEnter; if (timeLineAlertTarget != null) { ExitEventGameObject exitEventGameObject = collider.gameObject.GetOrAddComponent(); 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(); } } }