CombatHeroXiuMianState.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  2. using Common.Utility.CombatEvent;
  3. using Fort23.Core;
  4. using GameLogic.Combat.CombatTool;
  5. namespace GameLogic.Combat.Hero.State
  6. {
  7. /// <summary>
  8. /// 英雄的休眠状态
  9. /// </summary>
  10. public class CombatHeroXiuMianState : CombatHeroStateBasic
  11. {
  12. private TimerEntity _timerEntity;
  13. public CombatHeroXiuMianState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity)
  14. {
  15. }
  16. protected override void ProEnter()
  17. {
  18. if (!combatHeroEntity.IsEnemy)
  19. {
  20. combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.idle);
  21. return;
  22. }
  23. combatHeroEntity.CombatAIBasic.isAlert = true;
  24. combatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(true).IsHide = true;
  25. CombatEventManager.Instance.AddEventListener(CombatEventType.ActiveCombat, ActiveCombat);
  26. TimeLineEventLogicGroupBasic timeLineEventLogicGroup =
  27. combatHeroEntity.combatHeroTimeLineControl.TimeLineData
  28. .GetTimeLineEventLogicGroup<TimeLineEventLogicGroupBasic>("xiumian", null);
  29. if (timeLineEventLogicGroup != null)
  30. {
  31. timeLineEventLogicGroup.SetCombatInfo(combatHeroEntity, null, null, new TriggerData(), null);
  32. timeLineEventLogicGroup.TimeLineUpdateEnd = delegate { FinishTimeLine(); };
  33. combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup(timeLineEventLogicGroup);
  34. }
  35. else
  36. {
  37. FinishTimeLine();
  38. }
  39. }
  40. protected void FinishTimeLine()
  41. {
  42. if (CombatController.currActiveCombat.CombatTypeBasic.isActiveCombat)
  43. {
  44. ActiveHero();
  45. }
  46. }
  47. protected void ActiveHero()
  48. {
  49. _timerEntity= TimerComponent.Instance.AddTimer(CombatCalculateTool.Instance.GetOdd(0, 2000),
  50. delegate
  51. {
  52. combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Active);
  53. });
  54. }
  55. private void ActiveCombat(IEventData eventData)
  56. {
  57. CombatEventManager.Instance.RemoveEventListener(CombatEventType.ActiveCombat, ActiveCombat);
  58. ActiveHero();
  59. }
  60. protected override void ProExit()
  61. {
  62. CombatEventManager.Instance.RemoveEventListener(CombatEventType.ActiveCombat, ActiveCombat);
  63. }
  64. protected override void ProDispose()
  65. {
  66. TimerComponent.Instance.Remove(_timerEntity);
  67. CombatEventManager.Instance.RemoveEventListener(CombatEventType.ActiveCombat, ActiveCombat);
  68. }
  69. }
  70. }