SkillBasic.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. using System;
  2. using System.Collections.Generic;
  3. using CombatCore.SerializationTimeLine;
  4. using CombatLibrary.CombatLibrary.CombatCore;
  5. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  6. using Common.Utility.CombatEvent;
  7. using Excel2Json;
  8. using Fort23.Common;
  9. using Fort23.Core;
  10. using Fort23.UTool;
  11. using GameLogic.Combat.CombatTool;
  12. using GameLogic.Combat.Hero;
  13. using GameLogic.CombatScenesTool;
  14. using UnityEngine;
  15. using Utility;
  16. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  17. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic;
  18. namespace GameLogic.Combat.Skill
  19. {
  20. public abstract class SkillBasic : CObject, ITimeLineTriggerEntity, ITimeLineEndSing, ITimeLineTargetEntity,
  21. ITimeLineTriggerEvent, ITimeLineAlertTargetEnter
  22. {
  23. public int skillGuid;
  24. public int UseCount;
  25. /// <summary>
  26. /// 普攻是否是近战
  27. /// </summary>
  28. public bool isMelee;
  29. /// <summary>
  30. /// 是否被激活
  31. /// </summary>
  32. public bool isActive = true;
  33. /// <summary>
  34. /// 是否使用中
  35. /// </summary>
  36. private bool isUse;
  37. public CombatHeroEntity CombatHeroEntity
  38. {
  39. get { return _combatHeroEntity; }
  40. }
  41. /// <summary>
  42. /// 当前激活技能的TimeLine数据
  43. /// </summary>
  44. protected List<TimeLineEventLogicGroupBasic> currUseAllTimeLineLogic = new List<TimeLineEventLogicGroupBasic>();
  45. private CombatHeroEntity _combatHeroEntity;
  46. private Map<string, System.Action<string, CombatHeroHitPoint, ITimelineFxLogic, TriggerData>>
  47. _triggerCallBack =
  48. new Map<string, Action<string, CombatHeroHitPoint, ITimelineFxLogic, TriggerData>>();
  49. public SkillConfig SelfSkillConfig;
  50. /// <summary>
  51. /// 武器专属机技能配置
  52. /// </summary>
  53. public SkillConfig WeaponSkillConfig;
  54. /// <summary>
  55. /// 释放技能的时候当前焦点的目标
  56. /// </summary>
  57. public CombatHeroEntity currFocusTarget;
  58. /// <summary>
  59. /// 激活的timelinegoup名字
  60. /// </summary>
  61. public string ActiveTimeLineGroupName;
  62. private System.Action finishCallBack;
  63. /// <summary>
  64. /// 完成时 是否是要完成的timeGroupName
  65. /// </summary>
  66. protected string _finishTimeLineGroupName;
  67. protected BetterList<CombatHeroEntity> _enterAlertTarget = new BetterList<CombatHeroEntity>();
  68. protected BetterList<ILifetCycleHitPoint> _currUseSkillTarget = new BetterList<ILifetCycleHitPoint>();
  69. protected bool _isEarlyWarning;
  70. /// <summary>
  71. /// 是否使用技能目标里的缓存池子
  72. /// </summary>
  73. protected bool _useSkillTargetPool = true;
  74. public TriggerData triggerData
  75. {
  76. get
  77. {
  78. _triggerData.Source = this;
  79. return _triggerData;
  80. }
  81. }
  82. private TriggerData _triggerData;
  83. /// <summary>
  84. /// 技能cd
  85. /// </summary>
  86. public float SkillCd
  87. {
  88. get { return _skillCd; }
  89. set { _skillCd = value; }
  90. }
  91. private float _skillCd;
  92. public float SkillMaxCd;
  93. // protected HarmType _harmType;
  94. private CombatParticleSystemPool _earlyWarningFx;
  95. private CombatHeroEntity _earlyWarningFristHero;
  96. public T This<T>()
  97. {
  98. return (T)(object)this;
  99. }
  100. public void InitSkill(CombatHeroEntity combatHeroEntity)
  101. {
  102. _combatHeroEntity = combatHeroEntity;
  103. ProInitSkill();
  104. }
  105. public override void ActiveObj()
  106. {
  107. }
  108. /// <summary>
  109. /// 休眠
  110. /// </summary>
  111. public override void DormancyObj()
  112. {
  113. _enterAlertTarget.Clear();
  114. _currUseSkillTarget.Clear();
  115. _triggerCallBack.Clear();
  116. _earlyWarningFx = null;
  117. _earlyWarningFristHero = null;
  118. _finishTimeLineGroupName = null;
  119. _earlyWarningFx = null;
  120. _isEarlyWarning = false;
  121. _triggerData = new TriggerData();
  122. _useSkillTargetPool = true;
  123. isUse = false;
  124. _combatHeroEntity = null;
  125. SkillMaxCd = 0;
  126. currUseAllTimeLineLogic.Clear();
  127. finishCallBack = null;
  128. }
  129. public virtual void ActiveLimitSkill()
  130. {
  131. isActive = true;
  132. }
  133. /// <summary>
  134. /// 开始游戏
  135. /// </summary>
  136. public void StartGame()
  137. {
  138. // InitSpecialWeapon();
  139. if (SelfSkillConfig.SkillType == 4 || SelfSkillConfig.SkillType == 5)
  140. {
  141. UseSkill();
  142. }
  143. ProStartGame();
  144. }
  145. public void InitSkillConfig(SkillConfig skillConfig)
  146. {
  147. SkillMaxCd = skillConfig.cd;
  148. _skillCd = SkillMaxCd;
  149. SelfSkillConfig = skillConfig;
  150. UseCount = skillConfig.SkillType * 100000;
  151. skillGuid = skillConfig.ID;
  152. ProInitSkillConfig();
  153. // LogTool.Log("初始化技能"+skillConfig.scriptName);
  154. }
  155. protected virtual void ProInitSkillConfig()
  156. {
  157. }
  158. /// <summary>
  159. /// 设置激活的TimeLine名字
  160. /// </summary>
  161. public void SetActiveTimeLineGroupName(string groupName)
  162. {
  163. ActiveTimeLineGroupName = groupName;
  164. }
  165. public virtual bool IsCanUse()
  166. {
  167. return true;
  168. }
  169. private bool IsWeaponIsSpecial
  170. {
  171. get { return WeaponSkillConfig.ID > 0; }
  172. }
  173. protected virtual void EarlyWarning()
  174. {
  175. }
  176. public HarmReturnInfo Harm(CombatHeroEntity source, CombatHeroHitPoint target, long att, AttType attType,
  177. TriggerData triggerData, HarmType harmType = HarmType.Null)
  178. {
  179. if (target == null || target.combatHeroEntity == null)
  180. {
  181. return null;
  182. }
  183. return CombatCalculateTool.Instance.Harm(source, target, att, attType, triggerData,
  184. harmType);
  185. }
  186. public HarmReturnInfo Recover(CombatHeroEntity source, CombatHeroHitPoint target, long att,
  187. AttType attType, HarmType harmType)
  188. {
  189. return CombatCalculateTool.Instance.Recover(source, target, att, attType, harmType, triggerData);
  190. }
  191. public void SetSkillFinishCallBack(System.Action finishCallBack)
  192. {
  193. this.finishCallBack = finishCallBack;
  194. }
  195. /// <summary>
  196. /// 开始使用技能
  197. /// </summary>
  198. public void UseSkill()
  199. {
  200. _enterAlertTarget.Clear();
  201. UseCount++;
  202. _triggerData = new TriggerData();
  203. isUse = true;
  204. _triggerData.TriggerGuid = UseCount;
  205. _currUseSkillTarget.Clear();
  206. currUseAllTimeLineLogic.Clear();
  207. // CombatEventManager.Instance.Dispatch(CombatEventType.HeroUseSkill, new HeroUseSkillEventData()
  208. // {
  209. // CombatHeroEntity = CombatHeroEntity,
  210. // SkillBasic = this
  211. // });
  212. ProUseSkill();
  213. }
  214. public override void Dispose()
  215. {
  216. currUseAllTimeLineLogic.Clear();
  217. ProDispose();
  218. _combatHeroEntity = null;
  219. }
  220. public void ReduceCd(float time)
  221. {
  222. if (!isActive || !IsCanReduceCd())
  223. {
  224. return;
  225. }
  226. _skillCd -= time;
  227. }
  228. protected virtual bool IsCanReduceCd()
  229. {
  230. return true;
  231. }
  232. public SpecialDotInfo GetSpecialDotInfo(string specialDotName)
  233. {
  234. return _combatHeroEntity.GetSpecialDotInfo(specialDotName);
  235. }
  236. public T GetILifetCycleHitPoint<T>(string hitPoinName, bool isStandType, bool isIgnoreHind)
  237. where T : ILifetCycleHitPoint
  238. {
  239. return _combatHeroEntity.GetILifetCycleHitPoint<T>(hitPoinName, isStandType, isIgnoreHind);
  240. }
  241. public T GetMainHotPoin<T>(bool isIgnoreHind) where T : ILifetCycleHitPoint
  242. {
  243. throw new NotImplementedException();
  244. }
  245. public void CloseLoopFx(IGObjectPoolInterface objectPoolInterface)
  246. {
  247. }
  248. /// <summary>
  249. /// 添加trigger监听事件
  250. /// </summary>
  251. /// <param name="groupName"></param>
  252. /// <param name="callBack"></param>
  253. protected void AddTriggerCallBack(string groupName,
  254. System.Action<string, CombatHeroHitPoint, ITimelineFxLogic, TriggerData> callBack)
  255. {
  256. if (!_triggerCallBack.ContainsKey(groupName))
  257. {
  258. _triggerCallBack.Add(groupName, callBack);
  259. }
  260. }
  261. /// <summary>
  262. /// 移除trigger添加事件
  263. /// </summary>
  264. /// <param name="groupName"></param>
  265. /// <param name="callBack"></param>
  266. protected void RemoveTriggerCallBack(string groupName,
  267. System.Action<string, TimeLineTriggerType, object, ITimelineFxLogic, object> callBack)
  268. {
  269. if (_triggerCallBack.ContainsKey(groupName))
  270. {
  271. _triggerCallBack.Remove(groupName);
  272. }
  273. }
  274. /// <summary>
  275. /// 激活timeLine数据
  276. /// </summary>
  277. /// <param name="groupName">组</param>
  278. /// <param name="currTarget">传递给timeLine的目标</param>
  279. /// <param name="extraData">透传消息</param>
  280. /// <param name="customizePos">自定义坐标</param>
  281. /// <param name="finishCallBack">timeLine完成回调</param>
  282. public TimeLineEventLogicGroupBasic ActivationTimeLineData(string groupName,
  283. BetterList<ILifetCycleHitPoint> currTarget = null,
  284. Vector3[] customizePos = null, System.Action finishCallBack = null, float startTime = default,
  285. object extraData = null)
  286. {
  287. bool isNoAnim = false;
  288. if (groupName.Contains("noAnim"))
  289. {
  290. groupName = groupName.Replace("noAnim", "");
  291. isNoAnim = true;
  292. }
  293. TimeLineEventLogicGroupBasic timeLineEventLogicGroup =
  294. _combatHeroEntity.combatHeroTimeLineControl.TimeLineData
  295. .GetTimeLineEventLogicGroup<TimeLineEventLogicGroupBasic>(groupName, null);
  296. try
  297. {
  298. if (timeLineEventLogicGroup != null)
  299. {
  300. timeLineEventLogicGroup.extraData = extraData;
  301. timeLineEventLogicGroup.SetCombatInfo(_combatHeroEntity, this, currTarget, triggerData, customizePos);
  302. timeLineEventLogicGroup.TimeLineUpdateEnd = finishCallBack;
  303. timeLineEventLogicGroup.timeLineTime = startTime;
  304. _combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup(timeLineEventLogicGroup);
  305. currUseAllTimeLineLogic.Add(timeLineEventLogicGroup);
  306. }
  307. }
  308. catch (Exception e)
  309. {
  310. LogTool.Error(e);
  311. }
  312. return timeLineEventLogicGroup;
  313. }
  314. /// <summary>
  315. /// 打断技能
  316. /// </summary>
  317. public void BreakSkill()
  318. {
  319. // CombatEventManager.Instance.Dispatch(CombatEventType.BreakSkill, new CombatEventDefaultData()
  320. // {
  321. // datas = new object[2] { _combatHeroEntity, this }
  322. // });
  323. for (int i = 0; i < currUseAllTimeLineLogic.Count; i++)
  324. {
  325. currUseAllTimeLineLogic[i].BreakTimeLine();
  326. _combatHeroEntity.combatHeroTimeLineControl.RemoveEventLogicGroup(currUseAllTimeLineLogic[i]);
  327. }
  328. currUseAllTimeLineLogic.Clear();
  329. SkillPlayFinish();
  330. ProBreakSkill();
  331. }
  332. /// <summary>
  333. /// 技能timeLine的完成标志。表示当前TimeLine播放完成
  334. /// </summary>
  335. /// <param name="groupName">那一个组的完成了</param>
  336. public void TimeLineEndSing(string groupName)
  337. {
  338. ProTimeLineEndSing(groupName);
  339. }
  340. /// <summary>
  341. /// 技能更新
  342. /// </summary>
  343. /// <param name="time"></param>
  344. public void CombatUpdate(float time)
  345. {
  346. ProCombatUpdate(time);
  347. }
  348. /// <summary>
  349. /// 技能播放完成
  350. /// </summary>
  351. public void SkillPlayFinish()
  352. {
  353. if (!isUse)
  354. {
  355. return;
  356. }
  357. isUse = false;
  358. // CombatEventManager.Instance.Dispatch(CombatEventType.SkillFinish, new HeroUseSkillEventData()
  359. // {
  360. // CombatHeroEntity = CombatHeroEntity,
  361. // SkillBasic = this
  362. // });
  363. ProSkillPlayFinish();
  364. finishCallBack?.Invoke();
  365. finishCallBack = null;
  366. _isEarlyWarning = false;
  367. _earlyWarningFristHero = null;
  368. if (_earlyWarningFx != null)
  369. {
  370. GObjectPool.Instance.Recycle(_earlyWarningFx);
  371. _earlyWarningFx = null;
  372. }
  373. }
  374. /// <summary>
  375. /// timeLine和子弹碰撞后会调用
  376. /// </summary>
  377. /// <param name="timeLineTriggerType">触发类型,默认没用</param>
  378. /// <param name="timeLineData">时间线上配置的数据(默认null)</param>
  379. /// <param name="targetEntity">目标对象(敌人)</param>
  380. /// <param name="triggerData">触发的额外数据——透传数据</param>
  381. public void TimeLineTrigger(string groupName, ILifetCycleHitPoint targetEntity,
  382. ITimelineFxLogic timelineFxLogic, TriggerData triggerData)
  383. {
  384. if (targetEntity == null)
  385. {
  386. return;
  387. }
  388. if (_triggerCallBack.ContainsKey(groupName))
  389. {
  390. _triggerCallBack[groupName]?.Invoke(groupName,
  391. targetEntity != null ? targetEntity.This<CombatHeroHitPoint>() : null, timelineFxLogic,
  392. triggerData);
  393. }
  394. else
  395. {
  396. ProDefaultTimeLineTrigger(groupName,
  397. targetEntity != null ? targetEntity.This<CombatHeroHitPoint>() : null, timelineFxLogic,
  398. triggerData);
  399. }
  400. }
  401. public ILifetCycleHitPoint[] GetTineLineTargetEntity(TimeLineEventLogicBasic timeLineEventLogicBasic)
  402. {
  403. // BetterList<ILifetCycleHitPoint> point = CombatListPool<ILifetCycleHitPoint>.Instance.Get();
  404. if (_useSkillTargetPool)
  405. {
  406. if (_currUseSkillTarget != null && _currUseSkillTarget.Count > 0)
  407. {
  408. return _currUseSkillTarget.ToArray();
  409. }
  410. }
  411. _currUseSkillTarget.Clear();
  412. ILifetCycleHitPoint[] allHit = ProGetTineLineTargetEntity(timeLineEventLogicBasic);
  413. _currUseSkillTarget.AddRange(allHit);
  414. return _currUseSkillTarget.ToArray();
  415. }
  416. public ILifetCycleHitPoint[] FilterTarget(TimeLineEventLogicBasic timeLineEventLogicBasic,
  417. FXTargetType fixtarget, ILifetCycleHitPoint[] target)
  418. {
  419. if ((int)fixtarget == 1)
  420. {
  421. return target;
  422. }
  423. // BetterList<ILifetCycleHitPoint> point = CombatListPool<ILifetCycleHitPoint>.Instance.Get();
  424. // bool myEnemy = _combatHeroEntity.CombatHeroDataComponent.CurrCombatHeroInfo.IsEnemy;
  425. // for (int i = 0; i < target.Count; i++)
  426. // {
  427. // bool targetEnemy = target[i].This<CombatHeroEntityHitPoint>().CombatHeroEntity.CombatHeroDataComponent
  428. // .CurrCombatHeroInfo.IsEnemy;
  429. // if (fixtarget.HasFlag(FXTargetType.Enemy) && targetEnemy != myEnemy)
  430. // {
  431. // point.Add(target[i]);
  432. // }
  433. //
  434. // if (fixtarget.HasFlag(FXTargetType.Teammate) && targetEnemy == myEnemy)
  435. // {
  436. // point.Add(target[i]);
  437. // }
  438. //
  439. // if (fixtarget.HasFlag(FXTargetType.Oneself) &&
  440. // target[i].This<CombatHeroEntityHitPoint>().CombatHeroEntity == _combatHeroEntity)
  441. // {
  442. // point.Add(target[i]);
  443. // }
  444. // }
  445. return target;
  446. }
  447. public ILifetCycleHitPoint[] FilterTargetForCombat(TimeLineEventLogicBasic timeLineEventLogicBasic,
  448. FXTargetType fixtarget,
  449. ILifetCycleHitPoint[] target)
  450. {
  451. return target;
  452. }
  453. protected virtual void ProInitSkill()
  454. {
  455. }
  456. protected abstract void ProUseSkill();
  457. protected virtual ILifetCycleHitPoint[] ProGetTineLineTargetEntity(
  458. TimeLineEventLogicBasic timeLineEventLogicBasic)
  459. {
  460. if (CombatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero)
  461. {
  462. return null;
  463. }
  464. return new[] { CombatHeroEntity.CombatAIBasic.currFocusTarget.GetThis<CombatHeroEntity>()
  465. .GetMainHotPoin<ILifetCycleHitPoint>() };
  466. }
  467. /// <summary>
  468. /// 默认的触发器
  469. /// </summary>
  470. /// <param name="groupName"></param>
  471. /// <param name="timeLineTriggerType"></param>
  472. /// <param name="timeLineData"></param>
  473. /// <param name="targetEntity"></param>
  474. /// <param name="triggerData"></param>
  475. protected virtual void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
  476. ITimelineFxLogic timelineFxLogic, TriggerData triggerData)
  477. {
  478. }
  479. protected virtual void ProSkillPlayFinish()
  480. {
  481. }
  482. protected virtual void ProDispose()
  483. {
  484. }
  485. /// <summary>
  486. ///
  487. /// </summary>
  488. /// <param name="groupName"></param>
  489. protected virtual void ProTimeLineEndSing(string groupName)
  490. {
  491. if (string.IsNullOrEmpty(_finishTimeLineGroupName))
  492. {
  493. SkillPlayFinish();
  494. }
  495. else if (_finishTimeLineGroupName == groupName)
  496. {
  497. SkillPlayFinish();
  498. }
  499. }
  500. protected virtual void ProCombatUpdate(float time)
  501. {
  502. }
  503. /// <summary>
  504. /// 技能被打断
  505. /// </summary>
  506. protected virtual void ProBreakSkill()
  507. {
  508. }
  509. protected virtual void ProStartGame()
  510. {
  511. }
  512. public void TimelineFxLogicInit(string groupName, ITimelineFxLogic timelineFxLogic, TriggerData triggerData)
  513. {
  514. ProTimelineFxLogicInit(groupName, timelineFxLogic, triggerData);
  515. }
  516. /// <summary>
  517. /// 实例化出的特效逻辑初始化
  518. /// </summary>
  519. /// <param name="groupName"></param>
  520. /// <param name="timelineFxLogic"></param>
  521. protected virtual void ProTimelineFxLogicInit(string groupName, ITimelineFxLogic timelineFxLogic,
  522. TriggerData triggerData)
  523. {
  524. }
  525. public void TimeLineTriggerGround(string groupName, ITimelineFxLogic timelineFxLogic, TriggerData triggerData)
  526. {
  527. ProTimeLineTriggerGround(groupName, timelineFxLogic, triggerData);
  528. }
  529. /// <summary>
  530. /// 触碰地面
  531. /// </summary>
  532. /// <param name="groupName"></param>
  533. /// <param name="timelineFxLogic"></param>
  534. protected virtual void ProTimeLineTriggerGround(string groupName, ITimelineFxLogic timelineFxLogic,
  535. TriggerData triggerData)
  536. {
  537. }
  538. public void InitAlert(TimeLineAlertSeriailztion timeLineAlertSeriailztion,GameObject gameObject)
  539. {
  540. CombatAlertManager.Instance.AddAlert(gameObject, _combatHeroEntity);
  541. }
  542. public void LeaveAlert(TimeLineAlertSeriailztion timeLineAlertSeriailztion,GameObject gameObject)
  543. {
  544. CombatAlertManager.Instance.RemoveAlert(gameObject);
  545. }
  546. public void Enter(TimeLineAlertSeriailztion timeLineAlertSeriailztion, Collider collider,GameObject gameObject)
  547. {
  548. HeroEntityMono heroEntityMono = collider.gameObject.GetComponent<HeroEntityMono>();
  549. if (heroEntityMono == null)
  550. {
  551. return;
  552. }
  553. CombatHeroEntity target = heroEntityMono.combatHeroEntity;
  554. if ( timeLineAlertSeriailztion.isFindEnemy&& target.IsEnemy==_combatHeroEntity.IsEnemy ||
  555. timeLineAlertSeriailztion.isFindMyHero&& target.IsEnemy!=_combatHeroEntity.IsEnemy )
  556. {
  557. return;
  558. }
  559. if (_enterAlertTarget.Contains(target))
  560. {
  561. return;
  562. }
  563. _enterAlertTarget.Add(target);
  564. if (timeLineAlertSeriailztion.alertType == TimeLineAlertSeriailztion.TimeLineAlertType.Dangerous)
  565. {
  566. AlertTriggerEventData alertTriggerEventData = AlertTriggerEventData.Create();
  567. alertTriggerEventData.combatHeroEntity = target;
  568. alertTriggerEventData.attackEntity = _combatHeroEntity;
  569. alertTriggerEventData.collider = collider;
  570. alertTriggerEventData.triggerObject= gameObject;
  571. alertTriggerEventData.isTrigger = true;
  572. CombatEventManager.Instance.Dispatch(CombatEventType.AlertTrigger, alertTriggerEventData);
  573. }
  574. ProHeroEnter(timeLineAlertSeriailztion,target);
  575. }
  576. protected virtual void ProHeroEnter(TimeLineAlertSeriailztion timeLineAlertSeriailztion, CombatHeroEntity target )
  577. {
  578. }
  579. public void Leave(TimeLineAlertSeriailztion timeLineAlertSeriailztion, Collider collider,GameObject gameObject)
  580. {
  581. HeroEntityMono heroEntityMono = collider.gameObject.GetComponent<HeroEntityMono>();
  582. if (heroEntityMono == null||CombatHeroEntity==null)
  583. {
  584. return;
  585. }
  586. CombatHeroEntity target = heroEntityMono.combatHeroEntity;
  587. if (target.IsEnemy == CombatHeroEntity.IsEnemy)
  588. {
  589. return;
  590. }
  591. if (!_enterAlertTarget.Contains(target))
  592. {
  593. return;
  594. }
  595. _enterAlertTarget.Remove(target);
  596. if (timeLineAlertSeriailztion.alertType == TimeLineAlertSeriailztion.TimeLineAlertType.Dangerous)
  597. {
  598. AlertTriggerEventData alertTriggerEventData = AlertTriggerEventData.Create();
  599. alertTriggerEventData.combatHeroEntity = target;
  600. alertTriggerEventData.attackEntity = _combatHeroEntity;
  601. alertTriggerEventData.collider = collider;
  602. alertTriggerEventData.isTrigger = false;
  603. alertTriggerEventData.triggerObject= gameObject;
  604. CombatEventManager.Instance.Dispatch(CombatEventType.AlertTrigger, alertTriggerEventData);
  605. }
  606. ProHeroLeave(timeLineAlertSeriailztion,target);
  607. }
  608. protected virtual void ProHeroLeave(TimeLineAlertSeriailztion timeLineAlertSeriailztion, CombatHeroEntity target )
  609. {
  610. }
  611. }
  612. }