123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using CombatLibrary.CombatLibrary.CombatCore;
- using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
- using Fort23.Core;
- using UnityEngine;
- using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
- public abstract class TimeLineEventLogicBasic : CObject
- {
- public TimeLineAssetSerialization timeLineAssetSerialization
- {
- get { return mTimeLineAssetSerialization; }
- }
- protected TimeLineAssetSerialization mTimeLineAssetSerialization;
- /// <summary>
- /// 是否进入
- /// </summary>
- protected bool IsEnter;
- protected bool IsLeave;
- protected bool IsDis;
- public ILifeCycle castEntity
- {
- get { return _castEntity; }
- }
- public ITimeLineTriggerEntity ITimeLineTriggerEntity
- {
- get { return _timeLineTriggerEntity; }
- }
- public TriggerData extraData
- {
- get { return _extraData; }
- set { _extraData = value; }
- }
- /// <summary>
- /// 施放者(谁施放的这个效果 (EntityBasic))
- /// </summary>
- protected ILifeCycle _castEntity;
- /// <summary>
- /// 触发者(谁触发的这个效果(skill))
- /// </summary>
- protected ITimeLineTriggerEntity _timeLineTriggerEntity;
- protected BetterList<ILifetCycleHitPoint> currTarget;
- protected TriggerData _extraData;
- public Vector3[] customizePos
- {
- get { return _customizePos; }
- }
- protected Vector3[] _customizePos;
- protected TimeLineEventLogicGroupBasic _timeLineEventLogicGroup;
- public virtual bool IsFinish()
- {
- return true;
- }
- public TimeLineEventLogicGroupBasic TimeLineEventLogicGroup
- {
- get { return _timeLineEventLogicGroup; }
- }
- public void InitEventLogic(TimeLineEventLogicGroupBasic timeLineEventLogicGroup,
- TimeLineAssetSerialization timeLineAssetSerialization)
- {
- mTimeLineAssetSerialization = timeLineAssetSerialization;
- this._timeLineEventLogicGroup = timeLineEventLogicGroup;
- }
- /// <summary>
- /// timeline触发后持续更新
- /// </summary>
- /// <param name="time">当前时间线从执行到现在的时间</param>
- public void TimeUpdate(float time)
- {
- if (time >= mTimeLineAssetSerialization.startTime)
- {
- if (!IsEnter)
- {
- IsEnter = true;
- Enter();
- }
- }
- ProTimeUpdate();
- if (time >= mTimeLineAssetSerialization.endTime)
- {
- if (!IsLeave)
- {
- IsLeave = true;
- Leave();
- }
- }
- }
- public override void ActiveObj()
- {
- }
- /// <summary>
- /// 休眠
- /// </summary>
- public override void DormancyObj()
- {
- // ProDispose();
- Dispose();
- ProDormancyObj();
- mTimeLineAssetSerialization = null;
- IsEnter = false;
- IsLeave = false;
- IsDis = false;
- _castEntity = null;
- _timeLineTriggerEntity = null;
- _extraData = default;
- currTarget = null;
- _customizePos = null;
- _timeLineEventLogicGroup = null;
- }
- protected virtual void ProDormancyObj()
- {
-
- }
- protected void Enter()
- {
- ProEnter();
- }
- protected void Leave()
- {
- ProLeave();
- }
- public void Pause()
- {
- ProPause();
- }
- protected virtual void ProPause()
- {
- }
- public void SetCombatInfo(ILifeCycle castEntity, ITimeLineTriggerEntity targetEntity,
- BetterList<ILifetCycleHitPoint> currTarget,
- TriggerData extraData,
- Vector3[] customizePos)
- {
- this._castEntity = castEntity;
- this._timeLineTriggerEntity = targetEntity;
- this.currTarget = currTarget;
- this._extraData = extraData;
- this._customizePos = customizePos;
- ProSetCombatInfo();
- }
- ///// <summary>m
- ///// 关闭FXinfo,隐藏掉改info创建并在使用的特效
- ///// </summary>
- public void BreakTimeLine()
- {
- if (currTarget != null)
- {
- currTarget.Clear();
- }
- ProBreakTimeLine();
-
- }
- public void Dispose()
- {
- if (IsDis)
- {
- return;
- }
- IsDis = true;
- if (!IsLeave && IsEnter)
- {
- IsLeave = true;
- Leave();
- }
- ProDispose();
- this._timeLineTriggerEntity = null;
- this._castEntity = null;
- this.currTarget = null;
- this._extraData = default;
- this._customizePos = null;
- }
- public BetterList<ILifetCycleHitPoint> GetSkillTarget()
- {
- if (mTimeLineAssetSerialization.targetEntityType.HasFlag(FXTargetType.Oneself))
- {
- BetterList<ILifetCycleHitPoint> target = CombatListPool<ILifetCycleHitPoint>.Instance.Get();
- target.Add(_castEntity.GetMainHotPoin<ILifetCycleHitPoint>(true));
- return target;
- }
- else
- {
- if (currTarget != null && currTarget.Count > 0)
- {
- return FilterTargetForCombat(currTarget);
- }
- if (_timeLineTriggerEntity == null)
- {
- return new BetterList<ILifetCycleHitPoint>(1);
- }
- ITimeLineTargetEntity timeLineTargetEntity = _timeLineTriggerEntity as ITimeLineTargetEntity;
- if (timeLineTargetEntity == null)
- {
- return new BetterList<ILifetCycleHitPoint>(1);
- }
- currTarget = CombatListPool<ILifetCycleHitPoint>.Instance.Get();
- ILifetCycleHitPoint[] getTarget = timeLineTargetEntity.GetTineLineTargetEntity(this);
- currTarget.AddRange(getTarget);
- getTarget = currTarget.ToArray();
- if ((int)mTimeLineAssetSerialization.targetEntityType != 2)
- {
- ILifetCycleHitPoint[] point =
- timeLineTargetEntity.FilterTarget(this, mTimeLineAssetSerialization.targetEntityType, getTarget);
- currTarget.Clear();
- currTarget.AddRange(point);
- }
- return FilterTargetForCombat(currTarget);
- }
- }
- private BetterList<ILifetCycleHitPoint> FilterTargetForCombat(BetterList<ILifetCycleHitPoint> point)
- {
- ITimeLineTargetEntity timeLineTargetEntity = _timeLineTriggerEntity as ITimeLineTargetEntity;
- if (timeLineTargetEntity == null)
- {
- return point;
- }
- ILifetCycleHitPoint[] lifetCycleHitPoints =
- timeLineTargetEntity.FilterTargetForCombat(this, mTimeLineAssetSerialization.targetEntityType,
- point.ToArray());
- point.Clear();
- point.AddRange(lifetCycleHitPoints);
- return point;
- }
- protected abstract void ProSetCombatInfo();
- protected abstract void ProEnter();
- protected abstract void ProLeave();
- protected abstract void ProTimeUpdate();
- protected abstract void ProBreakTimeLine();
- protected virtual void ProDispose()
- {
- }
- }
|