DahalAction.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. using System;
  2. using ExtensionMethods;
  3. using UnityEngine;
  4. public class DahalAction : EnemyBaseAction
  5. {
  6. protected override void Start()
  7. {
  8. this.stateMachine.AddStates(typeof(DahalAction.StateEnum));
  9. this.stateMachine.OnEnter += this.OnMyStateEnter;
  10. this.stateMachine.OnTransfer += this.OnStateTransfer;
  11. base.AnimChangeState(DahalAction.StateEnum.Idle, 1f);
  12. this._dahalAnimListener = base.GetComponent<DahalAnimListener>();
  13. }
  14. private void FixedUpdate()
  15. {
  16. if (this.stateMachine.currentState == "HitToFly3")
  17. {
  18. Vector2 currentSpeed = this.eAttr.timeController.GetCurrentSpeed();
  19. float f = currentSpeed.x;
  20. f = Mathf.Clamp(Mathf.Abs(f) - this._airFric * Time.fixedDeltaTime, 0f, float.MaxValue) * Mathf.Sign(f);
  21. currentSpeed.x = Mathf.Clamp(Mathf.Abs(f) - this._airFric * Time.fixedDeltaTime, 0f, float.PositiveInfinity) * Mathf.Sign(f);
  22. this.eAttr.timeController.SetSpeed(currentSpeed);
  23. }
  24. }
  25. protected override void Update()
  26. {
  27. base.Update();
  28. if (this.stateMachine.currentState == "Idle")
  29. {
  30. base.FaceToPlayer();
  31. }
  32. if (this.stateMachine.currentState == "HitToFly3")
  33. {
  34. Vector2 currentSpeed = this.eAttr.timeController.GetCurrentSpeed();
  35. if (currentSpeed.y > 0f)
  36. {
  37. currentSpeed.y = 0f;
  38. this.eAttr.timeController.SetSpeed(currentSpeed);
  39. }
  40. }
  41. if (this.stateMachine.currentState == "Atk10_2")
  42. {
  43. this.eAttr.timeController.SetSpeed(Vector2.zero);
  44. if (base.transform.position.y - this._atk102StartPos.y >= 4f)
  45. {
  46. base.FaceToPlayer();
  47. base.AnimChangeState(DahalAction.StateEnum.Atk10_3, 1f);
  48. }
  49. }
  50. }
  51. private void OnMyStateEnter(object sender, StateMachine.StateEventArgs args)
  52. {
  53. string state = args.state;
  54. switch (state)
  55. {
  56. case "Atk12":
  57. case "Atk2":
  58. case "Atk5":
  59. case "Atk6":
  60. case "AirPush":
  61. case "Atk10_2":
  62. this.spineAnim.Play(args.state, true, false, this.eAttr.atkSpeed);
  63. break;
  64. case "Atk1End1":
  65. case "Atk1End2":
  66. case "Atk1Ready1":
  67. case "Atk1_1":
  68. case "Atk1_2":
  69. case "Atk1_3":
  70. case "Atk1Ready2":
  71. case "Atk1Ready3":
  72. case "Atk2End":
  73. case "Atk2Ready":
  74. case "Atk13":
  75. case "Atk3":
  76. case "Atk4":
  77. case "Atk4Charging":
  78. case "Atk4End":
  79. case "Atk4Ready":
  80. case "Atk5Ready":
  81. case "Atk5End":
  82. case "Atk6End":
  83. case "Atk6Ready":
  84. case "Atk7":
  85. case "Atk72":
  86. case "Atk8":
  87. case "Atk9":
  88. case "Atk82":
  89. case "Atk92":
  90. case "AirStandUp":
  91. case "AirPushEnd":
  92. case "Atk10_1":
  93. case "Atk10_3":
  94. case "Atk1Move1":
  95. case "Atk1Move2":
  96. case "Atk1Move3":
  97. this.spineAnim.Play(args.state, false, true, this.eAttr.atkSpeed);
  98. break;
  99. case "Die":
  100. case "QTEDie":
  101. case "QTEDie2":
  102. case "Hit1":
  103. case "HitToFly1":
  104. case "HitToFly2":
  105. case "HitToFly3":
  106. case "GetUp":
  107. case "HitGround":
  108. case "GroundDodge":
  109. case "Angry":
  110. case "QTEHit":
  111. this.spineAnim.Play(args.state, false, true, 1f);
  112. break;
  113. case "Idle":
  114. case "DieIdle":
  115. case "Move":
  116. case "WeakMod":
  117. case "Fall":
  118. case "Rush":
  119. this.spineAnim.Play(args.state, true, false, 1f);
  120. break;
  121. }
  122. }
  123. private void OnStateTransfer(object sender, StateMachine.TransferEventArgs args)
  124. {
  125. base.GetComponent<EnemyBaseHurt>().StopFollowLeftHand();
  126. if (this.ExitAtkSta(args.lastState, args.nextState))
  127. {
  128. this.Atk6 = false;
  129. this.eAttr.paBody = false;
  130. this.atkBox.localScale = Vector3.zero;
  131. this._dahalAnimListener.StopShoot();
  132. this._dahalAnimListener.StopATK6Effect();
  133. }
  134. if (this.EnterAtkSta(args.lastState, args.nextState))
  135. {
  136. base.GetComponentInChildren<EnemyAtk>().atkId = Incrementor.GetNextId();
  137. }
  138. if (args.nextState == "HitToFly3")
  139. {
  140. Vector2 currentSpeed = this.eAttr.timeController.GetCurrentSpeed();
  141. currentSpeed.y = 0f;
  142. this.eAttr.timeController.SetSpeed(currentSpeed);
  143. this.eAttr.timeController.SetGravity(0f);
  144. }
  145. if (args.lastState == "HitToFly3" && !this.eAttr.willBeExecute)
  146. {
  147. this.eAttr.timeController.SetGravity(1f);
  148. }
  149. if (args.nextState == "Atk10_2")
  150. {
  151. this._atk102StartPos = base.transform.position;
  152. }
  153. if (args.nextState == "Atk1Ready1" || args.nextState == "AirStandUp" || args.nextState == "Atk92")
  154. {
  155. this.eAttr.timeController.SetSpeed(Vector2.zero);
  156. this.eAttr.timeController.SetGravity(0f);
  157. }
  158. if (args.lastState == "Angry")
  159. {
  160. base.GetComponent<DahalHurt>().HitIntoSecondLevel();
  161. }
  162. if (args.nextState == "Fall")
  163. {
  164. this.eAttr.timeController.SetGravity(1f);
  165. }
  166. }
  167. public override void Attack1(int dir)
  168. {
  169. if (this.eAttr.isDead)
  170. {
  171. return;
  172. }
  173. if (!this.IsInNormalState())
  174. {
  175. return;
  176. }
  177. base.ChangeFace(dir);
  178. this.Atk1Used = true;
  179. base.AnimChangeState(DahalAction.StateEnum.Atk1Ready1, 1f);
  180. }
  181. public override void Attack4(int dir)
  182. {
  183. if (this.eAttr.isDead)
  184. {
  185. return;
  186. }
  187. if (!this.IsInNormalState())
  188. {
  189. return;
  190. }
  191. base.ChangeFace(dir);
  192. base.AnimChangeState(DahalAction.StateEnum.Atk4Ready, 1f);
  193. }
  194. public override void Attack8(int dir)
  195. {
  196. if (this.eAttr.isDead)
  197. {
  198. return;
  199. }
  200. if (!this.IsInNormalState())
  201. {
  202. return;
  203. }
  204. this.Atk8Uesd = true;
  205. base.AnimChangeState(DahalAction.StateEnum.Atk7, 1f);
  206. }
  207. public override void Attack10(int dir)
  208. {
  209. if (this.eAttr.isDead)
  210. {
  211. return;
  212. }
  213. if (!this.IsInNormalState())
  214. {
  215. return;
  216. }
  217. base.AnimChangeState(DahalAction.StateEnum.Atk9, 1f);
  218. }
  219. public override void Attack11(int dir)
  220. {
  221. if (this.eAttr.isDead)
  222. {
  223. return;
  224. }
  225. if (!this.IsInNormalState())
  226. {
  227. return;
  228. }
  229. this.Atk10Uesd = true;
  230. this.eAttr.timeController.SetGravity(0f);
  231. this.eAttr.timeController.SetSpeed(Vector2.zero);
  232. base.AnimChangeState(DahalAction.StateEnum.Atk10_1, 1f);
  233. }
  234. public override void SideStep()
  235. {
  236. if (this.eAttr.isDead)
  237. {
  238. return;
  239. }
  240. if (this.IsInSideStepState())
  241. {
  242. return;
  243. }
  244. if (!this.eAttr.isOnGround)
  245. {
  246. return;
  247. }
  248. if (this.IsInWeakSta())
  249. {
  250. return;
  251. }
  252. base.SideStep();
  253. base.AnimChangeState(DahalAction.StateEnum.GroundDodge, 1f);
  254. }
  255. public override void CounterAttack(int dir)
  256. {
  257. if (this.eAttr.isDead)
  258. {
  259. return;
  260. }
  261. if (this.IsInAttackState())
  262. {
  263. return;
  264. }
  265. if (base.GetComponent<DahalHurt>().currentPhase != 1)
  266. {
  267. return;
  268. }
  269. if (this.stateMachine.currentState.IsInArray(DahalAction.QTESta) || this.IsInWeakSta())
  270. {
  271. return;
  272. }
  273. R.Effect.Generate(128, base.transform, Vector3.up * 4f, new Vector3(0f, 0f, 0f), default(Vector3), true);
  274. base.ChangeFace(dir);
  275. this.eAttr.paBody = true;
  276. SingletonMono<WorldTime>.Instance.TimeSlowByFrameOn60Fps(60, 0.5f);
  277. base.AnimChangeState(DahalAction.StateEnum.AirStandUp, 1f);
  278. }
  279. public void Angry()
  280. {
  281. base.FaceToPlayer();
  282. this.eAttr.timeController.SetSpeed(Vector2.zero);
  283. base.AnimChangeState(DahalAction.StateEnum.Angry, 1f);
  284. }
  285. public override void Idle1()
  286. {
  287. if (!this.IsInNormalState())
  288. {
  289. return;
  290. }
  291. base.AnimChangeState(DahalAction.StateEnum.Idle, 1f);
  292. }
  293. public override bool IsInNormalState()
  294. {
  295. return this.stateMachine.currentState.IsInArray(DahalAction.NormalSta) && base.IsInNormalState();
  296. }
  297. public override bool IsInDeadState(string state)
  298. {
  299. return state.IsInArray(DahalAction.DieSta);
  300. }
  301. public override void AnimReady()
  302. {
  303. base.AnimChangeState(DahalAction.StateEnum.Idle, 1f);
  304. }
  305. public override void AnimExecute()
  306. {
  307. base.AnimExecute();
  308. int dir = (base.player.transform.localScale.x >= 0f) ? 1 : -1;
  309. base.ChangeFace(dir);
  310. base.ExitWeakState(true);
  311. base.WeakEffectDisappear("RollEnd");
  312. R.Camera.Controller.CameraZoom(base.transform.position + Vector3.up * 3f, 0.166666672f, 2f);
  313. R.Camera.Controller.CameraShake(0.2f, 0.2f, CameraController.ShakeTypeEnum.Rect, false);
  314. this.eAttr.isFlyingUp = false;
  315. this.eAttr.checkHitGround = false;
  316. base.AnimChangeState(DahalAction.StateEnum.QTEDie, 1f);
  317. }
  318. public override void AnimQTEHurt()
  319. {
  320. base.AnimQTEHurt();
  321. int dir = (base.player.transform.localScale.x >= 0f) ? 1 : -1;
  322. base.ChangeFace(dir);
  323. base.ExitWeakState(true);
  324. this.eAttr.isFlyingUp = false;
  325. this.eAttr.checkHitGround = false;
  326. R.Camera.Controller.CameraZoom(base.transform.position + Vector3.up * 3f, 0.166666672f, 2f);
  327. R.Camera.Controller.CameraShake(0.2f, 0.2f, CameraController.ShakeTypeEnum.Rect, false);
  328. base.AnimChangeState(DahalAction.StateEnum.QTEHit, 1f);
  329. Transform transform = R.Effect.Generate(178, null, base.transform.position, default(Vector3), default(Vector3), true);
  330. transform.localScale = base.transform.localScale;
  331. }
  332. public bool DahyalAutoMove(int type)
  333. {
  334. if (this.isAutoMoveing)
  335. {
  336. return true;
  337. }
  338. if (!this.IsInNormalState())
  339. {
  340. return false;
  341. }
  342. this.isAutoMoveing = true;
  343. if (type != 1)
  344. {
  345. if (type == 2)
  346. {
  347. this.AnimMoveQuick();
  348. }
  349. }
  350. else
  351. {
  352. this.AnimMove();
  353. }
  354. return true;
  355. }
  356. public override void AnimMove()
  357. {
  358. base.AnimChangeState(DahalAction.StateEnum.Move, 1f);
  359. }
  360. private void AnimMoveQuick()
  361. {
  362. base.AnimChangeState(DahalAction.StateEnum.Rush, 1f);
  363. }
  364. public override bool IsInSideStepState()
  365. {
  366. return this.stateMachine.currentState.IsInArray(DahalAction.SideStepSta);
  367. }
  368. public override bool IsInWeakSta()
  369. {
  370. return this.eAttr.inWeakState;
  371. }
  372. public override bool IsInAttackState()
  373. {
  374. return this.stateMachine.currentState.IsInArray(DahalAction.AttackSta);
  375. }
  376. protected override bool EnterAtkSta(string lastState, string nextState)
  377. {
  378. return nextState.IsInArray(DahalAction.AttackSta) && !lastState.IsInArray(DahalAction.AttackSta);
  379. }
  380. protected override bool ExitAtkSta(string lastState, string nextState)
  381. {
  382. return !nextState.IsInArray(DahalAction.AttackSta) && lastState.IsInArray(DahalAction.AttackSta);
  383. }
  384. public bool Atk6;
  385. private Vector3 _atk102StartPos;
  386. public bool Atk1Used;
  387. public bool Atk8Uesd;
  388. public bool Atk10Uesd;
  389. public bool DahalDie;
  390. public static readonly string[] NormalSta = new string[]
  391. {
  392. "Idle",
  393. "Move",
  394. "Rush"
  395. };
  396. private static readonly string[] AttackSta = new string[]
  397. {
  398. "Atk1End1",
  399. "Atk1End2",
  400. "Atk1Ready1",
  401. "Atk1Ready2",
  402. "Atk1Ready3",
  403. "Atk2",
  404. "Atk2End",
  405. "Atk2Ready",
  406. "Atk3",
  407. "Atk1_1",
  408. "Atk12",
  409. "Atk13",
  410. "Atk5Ready",
  411. "Atk5",
  412. "Atk5End",
  413. "Atk6Ready",
  414. "Atk6",
  415. "Atk6End",
  416. "Atk7",
  417. "Atk8",
  418. "Atk9",
  419. "Atk82",
  420. "Atk92",
  421. "AirPush",
  422. "AirPushEnd",
  423. "AirStandUp",
  424. "Atk10_1",
  425. "Atk10_2",
  426. "Atk10_3",
  427. "Atk72",
  428. "Atk1Move1",
  429. "Atk1Move2",
  430. "Atk1Move3",
  431. "Atk1_2",
  432. "Atk1_3"
  433. };
  434. public static readonly string[] HurtSta = new string[]
  435. {
  436. "Hit1",
  437. "HitToFly1",
  438. "HitToFly2",
  439. "HitToFly3",
  440. "Fall",
  441. "HitGround",
  442. "GetUp",
  443. "QTEHit"
  444. };
  445. private static readonly string[] DieSta = new string[]
  446. {
  447. "Die",
  448. "QTEDie",
  449. "QTEDie2",
  450. "Atk4",
  451. "Atk4Charging",
  452. "Atk4End",
  453. "Atk4Ready",
  454. "DieIdle"
  455. };
  456. private static readonly string[] SideStepSta = new string[]
  457. {
  458. "GroundDodge",
  459. "Rush"
  460. };
  461. private static readonly string[] QTESta = new string[]
  462. {
  463. "QTEDie",
  464. "QTEDie2",
  465. "QTEHit"
  466. };
  467. private DahalAnimListener _dahalAnimListener;
  468. private readonly float _airFric = 8f;
  469. public enum StateEnum
  470. {
  471. Atk1End1,
  472. Atk1End2,
  473. Atk1Ready1,
  474. Atk1Ready2,
  475. Atk1Ready3,
  476. Atk2,
  477. Atk2End,
  478. Atk2Ready,
  479. Atk3,
  480. Atk4,
  481. Atk4Charging,
  482. Atk4End,
  483. Atk4Ready,
  484. Atk1_1,
  485. Atk12,
  486. Atk13,
  487. Die,
  488. Hit1,
  489. Idle,
  490. Move,
  491. WeakMod,
  492. Atk5Ready,
  493. Atk5,
  494. Atk5End,
  495. Atk6Ready,
  496. Atk6,
  497. Atk6End,
  498. Atk7,
  499. Atk8,
  500. Atk9,
  501. Atk82,
  502. Atk92,
  503. HitToFly1,
  504. HitToFly2,
  505. HitToFly3,
  506. Fall,
  507. HitGround,
  508. GetUp,
  509. AirPush,
  510. AirPushEnd,
  511. AirStandUp,
  512. Atk10_1,
  513. Atk10_2,
  514. Atk10_3,
  515. GroundDodge,
  516. Atk72,
  517. Atk1Move1,
  518. Atk1Move2,
  519. Atk1Move3,
  520. Atk1_2,
  521. Atk1_3,
  522. Rush,
  523. Angry,
  524. QTEDie,
  525. QTEDie2,
  526. QTEHit,
  527. DieIdle
  528. }
  529. }