57 lines
1.3 KiB
GDScript
57 lines
1.3 KiB
GDScript
extends Area2D
|
|
|
|
signal died
|
|
|
|
var start_pos: Vector2 = Vector2.ZERO
|
|
var speed: float = 0
|
|
var is_exploded = false
|
|
|
|
var bullet_scene: PackedScene = preload("res://enemy_bullet/enemy_bullet.tscn")
|
|
|
|
@onready var screensize: Vector2 = get_viewport_rect().size
|
|
|
|
func start(pos):
|
|
speed = 0
|
|
position = Vector2(pos.x, -pos.y)
|
|
start_pos = pos
|
|
is_exploded = false
|
|
await get_tree().create_timer(randf_range(0.25, 0.55)).timeout
|
|
var tween = create_tween().set_trans(Tween.TRANS_BACK)
|
|
tween.tween_property(self, "position:y", start_pos.y, 1.4)
|
|
await tween.finished
|
|
$MoveTimer.wait_time = randf_range(5, 20)
|
|
$MoveTimer.start()
|
|
$ShootTimer.wait_time = randf_range(4, 20)
|
|
$ShootTimer.start()
|
|
|
|
func explode():
|
|
if is_exploded:
|
|
return
|
|
|
|
is_exploded = true
|
|
speed = 0
|
|
$AnimationPlayer.play("explode")
|
|
set_deferred("monitoring", false)
|
|
died.emit(5)
|
|
await $AnimationPlayer.animation_finished
|
|
queue_free()
|
|
|
|
func _process(delta):
|
|
position.y += speed * delta
|
|
if position.y > screensize.y + 32:
|
|
start(start_pos)
|
|
|
|
func _on_move_timer_timeout():
|
|
speed = randf_range(75, 100)
|
|
|
|
func _on_shoot_timer_timeout():
|
|
var b = bullet_scene.instantiate()
|
|
get_tree().root.add_child(b)
|
|
b.start(position)
|
|
$ShootTimer.wait_time = randf_range(4, 20)
|
|
$ShootTimer.start()
|
|
|
|
|
|
func _on_enemy_ready(pos):
|
|
start(pos)
|