12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- extends Button
- @export var action := "ui_up"
- func _ready() -> void:
- assert(InputMap.has_action(action))
- set_process_unhandled_key_input(false)
- display_current_key()
- func _toggled(is_button_pressed: bool) -> void:
- set_process_unhandled_key_input(is_button_pressed)
- if is_button_pressed:
- text = "<press a key>"
- modulate = Color.YELLOW
- release_focus()
- else:
- display_current_key()
- modulate = Color.WHITE
- # Grab focus after assigning a key, so that you can go to the next
- # key using the keyboard.
- grab_focus()
- # NOTE: You can use the `_input()` callback instead, especially if
- # you want to work with gamepads.
- func _unhandled_key_input(event: InputEvent) -> void:
- # Skip if pressing Enter, so that the input mapping GUI can be navigated
- # with the keyboard. The downside of this approach is that the Enter
- # key can't be bound to actions.
- if event is InputEventKey and event.keycode != KEY_ENTER:
- remap_action_to(event)
- button_pressed = false
- func remap_action_to(event: InputEvent) -> void:
- # We first change the event in this game instance.
- InputMap.action_erase_events(action)
- InputMap.action_add_event(action, event)
- # And then save it to the keymaps file.
- KeyPersistence.keymaps[action] = event
- KeyPersistence.save_keymap()
- text = event.as_text()
- func display_current_key() -> void:
- var current_key := InputMap.action_get_events(action)[0].as_text()
- text = current_key
|