The_Dark_Side_of_Earth/enemies/boss/blob_big.gd

39 lines
1.1 KiB
GDScript3
Raw Permalink Normal View History

2025-09-18 20:09:53 +02:00
extends Node2D
@onready var player = get_tree().get_root().get_node("main/Player")
var speed = 200
var angular_speed = TAU/8
var lifetime = 5
var ready_blobs = 0
2025-10-11 19:44:05 +02:00
var num_blobs = 0
2025-09-18 20:09:53 +02:00
var particles_ended = false
func _on_target_reached():
ready_blobs += 1
func _ready() -> void:
2025-10-11 19:44:05 +02:00
# Count those children that have a "target reached" signal and connect them.
2025-09-18 20:09:53 +02:00
for child in get_children():
if "target_reached" in child:
2025-10-11 19:44:05 +02:00
num_blobs += 1
2025-09-18 20:09:53 +02:00
child.connect("target_reached", _on_target_reached)
2025-09-19 15:12:35 +02:00
$SplashSound.play()
2025-09-18 20:09:53 +02:00
2025-09-23 12:36:15 +02:00
func _process(delta: float) -> void:
2025-10-11 19:44:05 +02:00
# Once all child blobs have reached their target, start moving as one while slowly rotating.
2025-09-18 20:09:53 +02:00
if ready_blobs == num_blobs:
position += (player.position - position).normalized() * speed * delta
rotate(angular_speed * delta)
lifetime -= delta
2025-10-11 19:44:05 +02:00
# In the end, clear all child blobs, then the rest.
2025-09-18 20:09:53 +02:00
if lifetime < 0 and not particles_ended:
particles_ended = true
for child in get_children():
if "target_reached" in child:
child.get_node("GPUParticles2D").emitting = false
child.get_node("Area2D").queue_free()
if lifetime < -2:
queue_free()