ShowerheadAI.gml 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. function enemy_showerhead_ai()
  2. {
  3. facing_x = sign(global.player.x - x);
  4. image_xscale = facing_x;
  5. var _margin = 320;
  6. if abs(global.player.x - x) <= _margin
  7. awake = true;
  8. var _sink_wait = global.player.x < _margin || global.player.x > room_width - _margin ||
  9. global.player.y < y - 15 * sprite_get_number(sEnemyShowerheadEmerge) / animation_spd
  10. switch(state)
  11. {
  12. case "WAIT":
  13. if _sink_wait
  14. wake_timer = irandom(60);
  15. else if --wake_timer <= 0 && awake
  16. {
  17. x = global.player.x + choose(-1, 1) * irandom_range(192, 256);
  18. state = "EMERGE";
  19. y_spd = -15;
  20. set_sprite(sEnemyShowerheadEmerge);
  21. }
  22. break;
  23. case "IDLE":
  24. if --idle_timer <= 0
  25. {
  26. state = nxt_state;
  27. if state == "RETREAT"
  28. {
  29. x_spd = -facing_x * 10;
  30. set_sprite(sEnemyShowerheadRetreat);
  31. }
  32. else if state == "SINK"
  33. {
  34. y_spd = 15;
  35. set_sprite(sEnemyShowerheadSink);
  36. }
  37. else if state == "CHARGE"
  38. {
  39. x_spd = facing_x * 25;
  40. set_sprite(sEnemyShowerheadCharge);
  41. }
  42. }
  43. break;
  44. case "SINK":
  45. if animation_end()
  46. {
  47. state = "WAIT";
  48. y_spd = 0;
  49. }
  50. break;
  51. case "EMERGE":
  52. if animation_end()
  53. {
  54. y_spd = 0;
  55. set_sprite(sEnemyShowerheadIdle);
  56. idle_timer = 30;
  57. state = "IDLE";
  58. nxt_state = "RETREAT";
  59. }
  60. break;
  61. case "RETREAT":
  62. if animation_end()
  63. {
  64. x_spd = 0;
  65. idle_timer = 10;
  66. state = "IDLE";
  67. nxt_state = "CHARGE";
  68. }
  69. break;
  70. case "CHARGE":
  71. x_spd -= sign(x_spd) * 0.5;
  72. if animation_end()
  73. {
  74. x_spd = 0;
  75. idle_timer = 30;
  76. state = "IDLE";
  77. nxt_state = "SINK";
  78. set_sprite(sEnemyShowerheadIdle);
  79. }
  80. }
  81. }