frame-of-mind/src/ui/prompter/prompt_button.gd

49 lines
881 B
GDScript3
Raw Normal View History

2026-01-23 12:39:47 +00:00
@tool
extends Button
## A button representing a specific action, and offering a default prompt that can be changed
class_name PromptButton
signal performed(action: StringName)
@onready var action_prompt : ActionPrompt = $ActionPrompt
2026-01-23 12:39:47 +00:00
@export_custom(PROPERTY_HINT_INPUT_NAME, "show_builtin") var action : StringName = &"ui_accept":
set(value):
action = value
2026-01-23 12:39:47 +00:00
if is_node_ready():
_update_action()
2026-01-23 12:39:47 +00:00
else:
_update_action.call_deferred()
2026-01-23 12:39:47 +00:00
get: return action
func _ready():
self.pressed.connect(perform)
action_prompt.pressed.connect(perform)
2026-01-23 14:05:24 +00:00
func perform() -> void:
performed.emit(action)
2026-01-23 12:39:47 +00:00
func _update_action():
text = action
2026-01-23 14:05:24 +00:00
$ActionPrompt.action = action
2026-01-23 12:39:47 +00:00
func _override_prompt(prompt: String):
2026-01-23 12:39:47 +00:00
if prompt:
text = prompt
else:
text = action
func appear(prompt: String = "") -> void:
_override_prompt(prompt)
2026-01-23 12:39:47 +00:00
show()
2026-01-23 12:39:47 +00:00
func vanish() -> void:
hide()