extends "res://objects/enemy/enemy.gd" signal entered_phase(phase) const Bullet = preload("res://objects/enemy/2600_bullet.tscn") const SmallExplosion = preload("res://objects/enemy/boss/2600_small_explosion.tscn") const IntelliHead = preload("res://objects/enemy/boss/intelli_head.tscn") export var shot_speed: float = 50 export var fire_rate: float = 1 export var can_shoot: bool = false export var explosion_rect: Rect2 export var make_explosions: bool = true var hp: int = 3 onready var bullet_positions = $"%BulletPositions" onready var shoot_timer = $ShootTimer onready var anims = $AnimationPlayer onready var head_sprite = $"%Head" func _on_ShootTimer_timeout(): if can_shoot: shoot() func shoot(): Audio.play_sound(Audio.a_bullet_barrage,Audio.ac_boss) for pos in bullet_positions.get_children(): var bullet = Bullet.instance() bullet.global_position = pos.global_position bullet.direction = Vector2.LEFT.rotated(pos.rotation) bullet.speed = shot_speed get_parent().add_child(bullet) shoot_timer.wait_time = fire_rate func _play_laser_sound(play: bool): if play: Audio.play_sound(Audio.a_rainbow_laser,Audio.ac_boss) else: Audio.ac_boss.playing = false func _play_charge_sound(play: bool): if play: Audio.play_sound(Audio.a_2600_charge,Audio.ac_boss) else: Audio.ac_boss.playing = false func _spawn_explosions() -> void: var head = IntelliHead.instance() head.global_position = $"%IntelliHeadPos".global_position get_parent().add_child(head) while make_explosions: yield(get_tree().create_timer(randf() * 0.5, false), "timeout") var explosion = SmallExplosion.instance() explosion.position = Vector2( rand_range(explosion_rect.position.x, explosion_rect.end.x), rand_range(explosion_rect.position.y, explosion_rect.end.y) ) add_child(explosion) func die(): hp -= 1 if hp > 0: anims.play("Beam") match hp: 2: Game.instance_node(preload("res://objects/enemy/boss/collapse_blocks.tscn"),0,0,get_parent()) emit_signal("entered_phase", 2) head_sprite.texture = preload("res://graphics/enemy/boss/stg_2600/head_cracked.png") 1: shot_speed = 70 $"%GlassShape".queue_free() emit_signal("entered_phase", 3) head_sprite.texture = preload("res://graphics/enemy/boss/stg_2600/head_broken.png") 0: anims.play("die") Audio.play_sound(Audio.a_die, Audio.ac_die) yield(anims, "animation_finished") emit_signal("entered_phase", 4) func _on_animation_finished(anim_name: String) -> void: if anim_name == "Beam": anims.play("stomping")