hero-mark-2/objects/hud/set_keyboard_button.gd

60 lines
1.2 KiB
GDScript

extends Button
const BLINK_SPEED: int = 150
export var action: String
export var options_screen: NodePath
var listen := false
func _init() -> void:
connect("pressed", self, "_on_pressed")
add_to_group("controls_buttons")
func _ready() -> void:
_update_text()
func _process(delta: float) -> void:
if listen:
if Time.get_ticks_msec() % (BLINK_SPEED * 2) < BLINK_SPEED:
modulate.a = 0.0
else:
modulate.a = 1.0
func _update_text() -> void:
text = OS.get_scancode_string(Controls.get_key(action))
modulate.a = 1.0
func _on_pressed() -> void:
if not listen:
listen = true
disabled = true
text = ""
get_node(options_screen).can_exit = false
get_tree().create_timer(2.0, true).connect("timeout", self, "_on_timeout")
func _on_timeout() -> void:
listen = false
disabled = false
_update_text()
get_node(options_screen).set_deferred("can_exit", true)
func _gui_input(event: InputEvent) -> void:
if listen:
if event is InputEventKey and event.pressed:
Controls.set_key(action, event.physical_scancode)
listen = false
get_node(options_screen).set_deferred("can_exit", true)
set_deferred("disabled", false)
_update_text()
accept_event()