106 lines
3.2 KiB
GDScript
106 lines
3.2 KiB
GDScript
extends Control
|
|
|
|
@export var _input_label: RichTextLabel
|
|
@export var _layout_label: RichTextLabel
|
|
@export var _typing_label: RichTextLabel
|
|
@export var _layout_swap_label: RichTextLabel
|
|
@export var _keyboard: GameKeyboard
|
|
|
|
|
|
func _ready() -> void:
|
|
_set_layout_label(LayoutConfig.current_layout)
|
|
_set_layout_swap_label(_keyboard.prompt_page)
|
|
_input_label.text = "awaiting input..."
|
|
_typing_label.text = ""
|
|
_keyboard.key_input_event_emitted.connect(_on_keyboard_key_input_event_emitted)
|
|
_keyboard.prompt_page_turned.connect(_on_keyboard_prompt_page_turned)
|
|
LayoutConfig.layout_swapped.connect(_set_layout_label)
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
_layout_label.visible = _keyboard.is_configuring
|
|
_layout_swap_label.visible = _keyboard.is_configuring
|
|
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
if event is not InputEventKey or not event.is_pressed():
|
|
return
|
|
|
|
var event_key := event as InputEventKey
|
|
|
|
var text := ""
|
|
text += "key_label: %s\n" % str(event_key.key_label)
|
|
text += "keycode: %s\n" % str(event_key.keycode)
|
|
text += "location: %s\n" % str(event_key.location)
|
|
text += "physical_keycode: %s\n" % str(event_key.physical_keycode)
|
|
text += "unicode: %s\n" % str(event_key.unicode)
|
|
text += "echo: %s\n" % str(event_key.echo)
|
|
text += "\n"
|
|
text += "as_text_key_label: %s\n" % event_key.as_text_key_label()
|
|
text += "as_text_keycode: %s\n" % event_key.as_text_keycode()
|
|
text += "as_text_location: %s\n" % event_key.as_text_location()
|
|
text += "as_text_physical_keycode: %s\n" % event_key.as_text_physical_keycode()
|
|
text += "\n"
|
|
text += (
|
|
"get_key_label_with_modifiers: %s\n" % event_key.get_key_label_with_modifiers()
|
|
)
|
|
text += "get_keycode_with_modifiers: %s\n" % event_key.get_keycode_with_modifiers()
|
|
text += (
|
|
"get_physical_keycode_with_modifiers: %s\n"
|
|
% event_key.get_physical_keycode_with_modifiers()
|
|
)
|
|
|
|
_input_label.text = text
|
|
|
|
|
|
func _set_layout_label(layout: AbstractLayout) -> void:
|
|
_layout_label.text = "physical layout: %s" % layout.get_name()
|
|
|
|
|
|
func _set_layout_swap_label(page: int) -> void:
|
|
var text := (
|
|
"page %s/%s Kp 0: next page >>>\n"
|
|
% [_keyboard.prompt_page + 1, _keyboard.prompt_pages_total]
|
|
)
|
|
|
|
var layouts := LayoutConfig.layouts.values() as Array[AbstractLayout]
|
|
var key: int = KEY_KP_1
|
|
for i in range(page * 9, mini(layouts.size(), page * 9 + 9)):
|
|
var input_event := InputEventKey.new()
|
|
input_event.physical_keycode = key as Key
|
|
text += (
|
|
"%s: %s\n" % [input_event.as_text_physical_keycode(), layouts[i].get_name()]
|
|
)
|
|
key += 1
|
|
|
|
_layout_swap_label.text = text
|
|
|
|
|
|
func _set_typing_label(append: String) -> void:
|
|
if _typing_label.text.length() >= 6:
|
|
_typing_label.text = _typing_label.text.substr(1) + append
|
|
else:
|
|
_typing_label.text += append
|
|
|
|
|
|
func _erase_typing_label() -> void:
|
|
_typing_label.text = _typing_label.text.substr(0, _typing_label.text.length() - 1)
|
|
|
|
|
|
func _on_keyboard_key_input_event_emitted(
|
|
game_key: GameKey, event: InputEventKey
|
|
) -> void:
|
|
if not event.is_pressed():
|
|
return
|
|
|
|
if game_key.props.is_unicode():
|
|
_set_typing_label(char(event.unicode))
|
|
elif game_key.props.keycode == KEY_SPACE:
|
|
_set_typing_label(" ")
|
|
elif game_key.props.keycode == KEY_BACKSPACE:
|
|
_erase_typing_label()
|
|
|
|
|
|
func _on_keyboard_prompt_page_turned(page: int) -> void:
|
|
_set_layout_swap_label(page)
|