frame-of-mind/src/logic-scenes/misc/skip_control.gd

80 lines
1.9 KiB
GDScript3
Raw Normal View History

2023-08-01 08:52:08 +00:00
extends Control
signal skip
signal proceed
2023-08-01 08:52:08 +00:00
@export var skip_delay: float = 0.5
@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
@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):
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:
skip.emit()
2024-09-15 09:30:31 +00:00
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():
2024-09-15 09:30:31 +00:00
if event.is_action_pressed("skip"):
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"):
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
func change_to_proceed_mode():
proceeding = true
func abort_auto_proceed():
auto_proceed = false