2023-08-01 08:52:08 +00:00
|
|
|
extends Control
|
|
|
|
|
|
|
|
|
|
signal skip
|
2025-01-16 16:32:58 +00:00
|
|
|
signal proceed
|
2023-08-01 08:52:08 +00:00
|
|
|
@export var skip_delay: float = 0.5
|
2025-01-16 16:32:58 +00:00
|
|
|
@export var auto_continue_delay: float = 1
|
2023-08-01 08:52:08 +00:00
|
|
|
@export var costum_owner: NodePath
|
|
|
|
|
var time_pressed: float = 0
|
2025-01-16 16:32:58 +00:00
|
|
|
|
|
|
|
|
@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
|
2023-08-01 08:52:08 +00:00
|
|
|
|
|
|
|
|
func _ready():
|
2024-10-06 09:31:47 +00:00
|
|
|
if costum_owner != NodePath(""):
|
|
|
|
|
owner = get_node(costum_owner)
|
2023-08-01 08:52:08 +00:00
|
|
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
|
|
|
func _process(delta):
|
2025-01-16 16:32:58 +00:00
|
|
|
if pressed and is_visible_in_tree():
|
2024-09-15 09:30:31 +00:00
|
|
|
time_pressed += delta
|
|
|
|
|
progress.value = time_pressed / skip_delay
|
|
|
|
|
if time_pressed >= skip_delay:
|
2025-01-16 16:32:58 +00:00
|
|
|
skip.emit()
|
2024-09-15 09:30:31 +00:00
|
|
|
pressed = false
|
|
|
|
|
time_pressed = 0
|
2025-01-16 16:32:58 +00:00
|
|
|
|
|
|
|
|
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():
|
2024-09-15 09:30:31 +00:00
|
|
|
if event.is_action_pressed("skip"):
|
2025-01-16 16:32:58 +00:00
|
|
|
if not proceeding:
|
|
|
|
|
pressed = true
|
|
|
|
|
else:
|
|
|
|
|
proceed.emit()
|
|
|
|
|
get_viewport().set_input_as_handled()
|
2024-09-15 09:30:31 +00:00
|
|
|
elif event.is_action_released("skip"):
|
2025-01-16 16:32:58 +00:00
|
|
|
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()
|
|
|
|
|
|
2023-08-01 08:52:08 +00:00
|
|
|
|
|
|
|
|
func _on_skip_button_toggled(button_pressed):
|
2024-09-15 09:30:31 +00:00
|
|
|
if button_pressed:
|
|
|
|
|
pressed = true
|
|
|
|
|
else:
|
|
|
|
|
pressed = false
|
|
|
|
|
time_pressed = 0
|
2025-01-16 16:32:58 +00:00
|
|
|
|
|
|
|
|
func change_to_proceed_mode():
|
|
|
|
|
proceeding = true
|
|
|
|
|
|
|
|
|
|
func abort_auto_proceed():
|
|
|
|
|
auto_proceed = false
|