BombKillerAction.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. using System;
  2. using UnityEngine;
  3. public class BombKillerAction : EnemyBaseAction
  4. {
  5. protected override void Start()
  6. {
  7. this.stateMachine.AddStates(typeof(BombKillerAction.StateEnum));
  8. this.stateMachine.OnEnter += this.OnMyStateEnter;
  9. this.stateMachine.OnTransfer += this.OnStateTransfer;
  10. base.AnimChangeState(BombKillerAction.StateEnum.Idle, 1f);
  11. }
  12. private void FixedUpdate()
  13. {
  14. if (this.stateMachine.currentState == "FlyToFall")
  15. {
  16. Vector2 currentSpeed = this.eAttr.timeController.GetCurrentSpeed();
  17. float f = currentSpeed.x;
  18. f = Mathf.Clamp(Mathf.Abs(f) - this.airFric * Time.fixedDeltaTime, 0f, float.MaxValue) * Mathf.Sign(f);
  19. currentSpeed.x = Mathf.Clamp(Mathf.Abs(f) - this.airFric * Time.fixedDeltaTime, 0f, float.PositiveInfinity) * Mathf.Sign(f);
  20. this.eAttr.timeController.SetSpeed(currentSpeed);
  21. }
  22. }
  23. protected override void Update()
  24. {
  25. base.Update();
  26. if (this.atk1Success)
  27. {
  28. Vector3 position = base.player.position;
  29. position.x = base.transform.position.x;
  30. base.player.position = position;
  31. }
  32. }
  33. private void OnMyStateEnter(object sender, StateMachine.StateEventArgs args)
  34. {
  35. BombKillerAction.StateEnum stateEnum = EnumTools.ToEnum<BombKillerAction.StateEnum>(args.state, false);
  36. switch (stateEnum)
  37. {
  38. case BombKillerAction.StateEnum.Atk1Ready:
  39. case BombKillerAction.StateEnum.Atk1Success:
  40. case BombKillerAction.StateEnum.Atk1Fail:
  41. case BombKillerAction.StateEnum.Atk2:
  42. case BombKillerAction.StateEnum.Die:
  43. case BombKillerAction.StateEnum.ExecuteDie:
  44. case BombKillerAction.StateEnum.FlyToFall:
  45. case BombKillerAction.StateEnum.GetUp:
  46. case BombKillerAction.StateEnum.Hit1:
  47. case BombKillerAction.StateEnum.Hit2:
  48. case BombKillerAction.StateEnum.HitGround:
  49. case BombKillerAction.StateEnum.HitToFly1:
  50. case BombKillerAction.StateEnum.AirDie:
  51. case BombKillerAction.StateEnum.AirDieFlyToFall:
  52. case BombKillerAction.StateEnum.AirDieHitGround:
  53. case BombKillerAction.StateEnum.Null:
  54. this.spineAnim.Play(stateEnum, false, true, 1f);
  55. break;
  56. case BombKillerAction.StateEnum.Execute:
  57. case BombKillerAction.StateEnum.Fall:
  58. case BombKillerAction.StateEnum.HitToFly2:
  59. case BombKillerAction.StateEnum.Idle:
  60. case BombKillerAction.StateEnum.Move:
  61. case BombKillerAction.StateEnum.AirDieFall:
  62. case BombKillerAction.StateEnum.HitFall:
  63. this.spineAnim.Play(stateEnum, true, false, 1f);
  64. break;
  65. }
  66. }
  67. private void OnStateTransfer(object sender, StateMachine.TransferEventArgs args)
  68. {
  69. base.GetComponent<EnemyBaseHurt>().StopFollowLeftHand();
  70. if (args.nextState == "FlyToFall")
  71. {
  72. Vector2 currentSpeed = this.eAttr.timeController.GetCurrentSpeed();
  73. currentSpeed.y = 0f;
  74. this.eAttr.timeController.SetSpeed(currentSpeed);
  75. this.eAttr.timeController.SetGravity(0f);
  76. }
  77. if (args.lastState == "FlyToFall" && !this.eAttr.willBeExecute)
  78. {
  79. this.eAttr.timeController.SetGravity(1f);
  80. }
  81. if (this.ExitAtkSta(args.lastState, args.nextState) && this.atk1Success)
  82. {
  83. this.atk1Success = false;
  84. base.GetComponent<BombKillerAnimEvent>().GenerateExplosion_Atk1();
  85. }
  86. }
  87. public override void Attack1(int dir)
  88. {
  89. if (this.eAttr.isDead)
  90. {
  91. return;
  92. }
  93. if (!this.IsInNormalState())
  94. {
  95. return;
  96. }
  97. base.ChangeFace(dir);
  98. base.AnimChangeState(BombKillerAction.StateEnum.Atk1Ready, 1f);
  99. }
  100. public void Atk1Success()
  101. {
  102. Vector3 position = base.transform.position;
  103. position.z = base.player.position.z - 0.01f;
  104. base.transform.position = position;
  105. this.atk1Success = true;
  106. }
  107. public override void Attack2(int dir)
  108. {
  109. if (this.eAttr.isDead)
  110. {
  111. return;
  112. }
  113. if (!this.IsInNormalState())
  114. {
  115. return;
  116. }
  117. base.ChangeFace(dir);
  118. base.AnimChangeState(BombKillerAction.StateEnum.Atk2, 1f);
  119. }
  120. public override bool IsInIdle()
  121. {
  122. return this.stateMachine.currentState == "Idle";
  123. }
  124. public override bool IsInNormalState()
  125. {
  126. return EnumTools.IsInEnum<BombKillerAction.NormalSta>(this.stateMachine.currentState, false) && base.IsInNormalState();
  127. }
  128. public override void AnimMove()
  129. {
  130. base.AnimChangeState(BombKillerAction.StateEnum.Move, 1f);
  131. }
  132. public override void AnimReady()
  133. {
  134. base.AnimChangeState(BombKillerAction.StateEnum.Idle, 1f);
  135. }
  136. public override bool IsInAttackState()
  137. {
  138. return EnumTools.IsInEnum<BombKillerAction.AttackSta>(this.stateMachine.currentState, false);
  139. }
  140. public override bool IsInDeadState(string state)
  141. {
  142. return EnumTools.IsInEnum<BombKillerAction.DieSta>(state, false);
  143. }
  144. public override bool IsInWeakSta()
  145. {
  146. return this.eAttr.inWeakState;
  147. }
  148. protected override bool EnterAtkSta(string lastState, string nextState)
  149. {
  150. return EnumTools.IsInEnum<BombKillerAction.AttackSta>(nextState, false) && !EnumTools.IsInEnum<BombKillerAction.AttackSta>(lastState, false);
  151. }
  152. protected override bool ExitAtkSta(string lastState, string nextState)
  153. {
  154. return !EnumTools.IsInEnum<BombKillerAction.AttackSta>(nextState, false) && EnumTools.IsInEnum<BombKillerAction.AttackSta>(lastState, false);
  155. }
  156. public bool atk1Success;
  157. public float airFric = 8f;
  158. public enum StateEnum
  159. {
  160. Atk1Ready,
  161. Atk1Success,
  162. Atk1Fail,
  163. Atk2,
  164. Die,
  165. Execute,
  166. ExecuteDie,
  167. Fall,
  168. FlyToFall,
  169. GetUp,
  170. Hit1,
  171. Hit2,
  172. HitGround,
  173. HitToFly1,
  174. HitToFly2,
  175. Idle,
  176. Move,
  177. AirDie,
  178. AirDieFlyToFall,
  179. AirDieFall,
  180. AirDieHitGround,
  181. HitFall,
  182. Null
  183. }
  184. public enum AttackSta
  185. {
  186. Atk1Ready,
  187. Atk1Success,
  188. Atk1Fail,
  189. Atk2
  190. }
  191. public enum DieSta
  192. {
  193. Die,
  194. Execute,
  195. ExecuteDie,
  196. AirDie,
  197. AirFlyToFall,
  198. AirDieFall,
  199. AirDieHitGround,
  200. Null
  201. }
  202. public enum HurtSta
  203. {
  204. Fall,
  205. FlyToFall,
  206. GetUp,
  207. Hit1,
  208. Hit2,
  209. HitGround,
  210. HitToFly1,
  211. HitToFly2,
  212. HitFall
  213. }
  214. public enum NormalSta
  215. {
  216. Idle,
  217. Move
  218. }
  219. }