60 lines
1.2 KiB
GDScript
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()
|