revo-jailbreak/objects/enemy/boss/2600.gd

86 lines
2.5 KiB
GDScript

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
fire_rate = 0.8
$"%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")