1
extends RefCounted
class_name WaitGroup

signal finished

var _waiting := 0
var _isFinished := false


func add(signal_for_wait: Signal) -> void:
	if _isFinished:
		push_error("Cannot add signals after wait has completed.")
		return

	_waiting += 1
	signal_for_wait.connect(_on_signal, CONNECT_ONE_SHOT)


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

	await finished


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

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

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

Download RAW File