class_name PromptContainer extends Control ## Free itself when every prompt has been used ## If true, automatically frees itself when there are no more input prompts among children @export var remove_when_prompts_depleted := true var _nb_prompts: int func _ready() -> void: _nb_prompts = 0 for child in get_children(): if child is InputPrompt: child.pressed.connect(child.queue_free) if child is InputPrompt or child is PromptContainer: child.tree_exited.connect(_on_child_exited_tree) _nb_prompts += 1 func switch(enable: bool) -> void: if enable: enable() else: disable() # Show and process func enable() -> void: set_visible(true) set_process_mode(Node.PROCESS_MODE_PAUSABLE) # Hide and stop processing func disable() -> void: set_visible(false) set_process_mode(Node.PROCESS_MODE_DISABLED) func remove_if_no_more_prompt() -> void: _nb_prompts -= 1 print(_nb_prompts, " remaining prompts") if _nb_prompts <= 0 and remove_when_prompts_depleted: # Only label remaining print("Destruction !") queue_free() func _on_child_exited_tree() -> void: remove_if_no_more_prompt()