35 lines
972 B
GDScript
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()
|