keebie/scripts/debug/debug_key_display.gd

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)