extends RefCounted class_name MultiAwait var waiting_count: int = 0 var finished: bool = false signal done(timed_out: bool) func _init(signals: Array[Signal], timeout: float) -> void: for sig in signals: var err: int = sig.connect(receive_signal, CONNECT_ONE_SHOT) if err == Error.OK: waiting_count += 1 check_done() var scene_tree: SceneTree = Engine.get_main_loop() as SceneTree if scene_tree != null: scene_tree.create_timer(timeout).timeout.connect(finish.bind(true)) print("MultiAwait: waiting for %d signals or %f seconds" % [waiting_count,timeout]) func receive_signal() -> void: waiting_count -= 1 print("MultiAwait: got signal, %d signals left" % [waiting_count]) check_done() func check_done() -> void: if waiting_count <= 0: finish(false) func finish(timed_out: bool) -> void: if !finished: print("MultiAwait: done, timed_out: %s" % [timed_out]) done.emit(timed_out) finished = true