extends Control signal skip signal proceed @export var skip_delay: float = 0.5 @export var auto_continue_delay: float = 1 @export var costum_owner: NodePath var time_pressed: float = 0 @onready var button: Button = %SkipButton @onready var progress: ProgressBar = %ProgressBar var pressed: bool = false var proceeding: bool = false: set(value): proceeding = value if proceeding and is_node_ready(): #FIXME: animation implementieren >:3 button.text = "continue" elif is_node_ready(): button.text = "skip to end (hold)" var auto_proceed: bool = false: set(value): auto_proceed = value #resets progress bar on button time_pressed = 0 func _ready(): if costum_owner != NodePath(""): owner = get_node(costum_owner) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): if pressed and is_visible_in_tree(): time_pressed += delta progress.value = time_pressed / skip_delay if time_pressed >= skip_delay: skip.emit() pressed = false time_pressed = 0 elif auto_proceed: time_pressed += delta if time_pressed >= auto_continue_delay: proceed.emit() func _unhandled_input(event: InputEvent) -> void: if is_visible_in_tree(): if event.is_action_pressed("skip"): if not proceeding: pressed = true else: proceed.emit() get_viewport().set_input_as_handled() elif event.is_action_released("skip"): if not proceeding: pressed = false time_pressed = 0 progress.value = 0 get_viewport().set_input_as_handled() elif event.is_action_pressed("ui_accept") or event.is_action_pressed("ui_focus_next"): proceed.emit() get_viewport().set_input_as_handled() func _on_skip_button_toggled(button_pressed): if button_pressed: pressed = true else: pressed = false time_pressed = 0 func change_to_proceed_mode(): proceeding = true func abort_auto_proceed(): auto_proceed = false