1
extends RefCounted
class_name WaitGroup

signal finished

var _waiting := 0
var _finished := false


func add(signal_for_wait: Signal, signal_args := 0) -> void:
	if _finished:
		push_error("Cannot add signals after wait has completed.")
		return

	_waiting += 1

	var callback := Callable(self, "_on_signal")

	if signal_args > 0:
		callback = callback.unbind(signal_args)

	signal_for_wait.connect(callback, CONNECT_ONE_SHOT)


func wait() -> void:
	if _waiting == 0:
		return

	await finished


func _on_signal() -> void:
	_waiting -= 1

	if _waiting == 0:
		_finished = true
		finished.emit()

For immediate assistance, please email our customer support: [email protected]

Download RAW File