DreamBall/levels/level.gd

35 lines
972 B
GDScript

class_name Level
extends Node3D
signal ring_collected
signal completed
## Lowercase, spaceless name of the level
var id: String
var music: Music
var velocity: float = 0.0
var rings: Array[Ring] = []
var finished_rings_count: int = 0
func _ready() -> void:
assert(len(id) > 0, self.name + " has no id!")
var children = get_children()
for child in children:
if is_instance_of(child, Music):
music = child
assert(is_instance_valid(music), self.name + " has no music!")
var rings_node = get_node("Rings")
assert(is_instance_valid(rings_node), self.name + " has no Rings node!")
var rings_node_children = rings_node.get_children()
for ring in rings_node_children:
if is_instance_of(ring, Ring):
rings.push_back(ring)
ring.connect("collect_signal", collect_ring)
func collect_ring():
finished_rings_count = len(rings.filter(func(ring: Ring): return ring.collected))
ring_collected.emit()
if finished_rings_count >= len(rings):
completed.emit()