| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- function boss_showerhead_ai()
- {
- facing_x = sign(global.player.x - x);
- image_xscale = facing_x;
-
- switch(state)
- {
- case "SPAWN":
- state = "IDLE";
- idle_timer = 60;
- break;
-
- case "IDLE":
- if --idle_timer <= 0
- {
- var _next = attack_queue[attack_index];
- attack_index = (attack_index + 1) % array_length(attack_queue);
-
- switch(_next)
- {
- case 1:
- state = "WINDUP";
- set_sprite(sBossShowerheadWindup);
- break;
- case 2:
- state = "SLAM";
- set_sprite(sBossShowerheadSlam);
- break;
- case 3:
- state = "RETREAT";
- x_spd = -boss_side * retreat_spd;
- set_sprite(sBossShowerheadRetreat);
- break;
- }
- }
- break;
-
- case "WINDUP":
- if animation_end()
- {
- shoot_count = 0;
- state = "SHOOT";
- set_sprite(sBossShowerheadShoot);
- }
- break;
-
- case "SHOOT":
- if animation_end()
- {
- var _bomb = icl(oShowerheadBomb);
- _bomb.x_spd = facing_x * (8 + shoot_count * 2);
- _bomb.y_spd = -10;
-
- shoot_count++;
- if shoot_count >= 3
- {
- state = "IDLE";
- idle_timer = 60;
- set_sprite(sBossShowerheadIdle);
- }
- }
- break;
-
- case "SLAM":
- if animation_end()
- {
- // 生成预警线控制器
- var _warn = icl(oBossWarning);
- _warn.phase = phase;
-
- state = "IDLE";
- idle_timer = 60;
- set_sprite(sBossShowerheadIdle);
- }
- break;
-
- case "RETREAT":
- var _target = (boss_side == 1) ? anchor_l : anchor_r;
- if abs(x - _target) < abs(x_spd)
- {
- x = _target;
- x_spd = 0;
- state = "CHARGE";
- x_spd = boss_side * charge_spd;
- set_sprite(sBossShowerheadCharge);
- }
- break;
-
- case "CHARGE":
- var _target = (boss_side == 1) ? anchor_r : anchor_l;
- if abs(x - _target) < abs(x_spd)
- {
- x = _target;
- x_spd = 0;
- boss_side *= -1; // 换边
- state = "IDLE";
- idle_timer = 60;
- set_sprite(sBossShowerheadIdle);
- }
- break;
- }
- }
|