From a6e31e55eda9bd57e8379ec7d34bb70ae81d775a Mon Sep 17 00:00:00 2001 From: teatov Date: Sat, 2 Aug 2025 10:39:33 +1000 Subject: [PATCH] add ability to get keyboard keys by filter --- scripts/game_key.gd | 11 +++++++++-- scripts/game_keyboard.gd | 13 +++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/scripts/game_key.gd b/scripts/game_key.gd index cb0035e..8d8e18e 100644 --- a/scripts/game_key.gd +++ b/scripts/game_key.gd @@ -79,7 +79,8 @@ static func instantiate_with_props( #region builtins func _ready() -> void: - keyboard.layout_size_changed.connect(_on_layout_size_changed) + keyboard.layout_size_changed.connect(_on_keyboard_layout_size_changed) + keyboard.keys_requested.connect(_on_keyboard_keys_requested) _set_labels() @@ -341,7 +342,7 @@ func _play_sfx(stream: AudioStream) -> void: #region event handlers -func _on_layout_size_changed(rect: Rect2) -> void: +func _on_keyboard_layout_size_changed(rect: Rect2) -> void: var center := rect.get_center() _default_position = _init_position _default_position.x -= center.x @@ -350,4 +351,10 @@ func _on_layout_size_changed(rect: Rect2) -> void: if not _pos_sod: _reset_animations() + +func _on_keyboard_keys_requested(filter_func: Callable) -> void: + if not filter_func.call(self): + return + keyboard.key_request_respond(self) + #endregion diff --git a/scripts/game_keyboard.gd b/scripts/game_keyboard.gd index edbbde2..63a0091 100644 --- a/scripts/game_keyboard.gd +++ b/scripts/game_keyboard.gd @@ -3,6 +3,7 @@ class_name GameKeyboard extends Node3D signal key_press_changed(game_key: GameKey, event: InputEventKey) signal layout_size_changed(rect: Rect2) signal prompt_page_turned(page: int) +signal keys_requested(filter_func: Callable) #region variables @export_group("Node references") @@ -32,6 +33,8 @@ var prompt_pages_total: int = 0 var _rot_sod: SecondOrderDynamics +var _requested_keys: Array[GameKey] = [] + @onready var _gap_to_size_ratio: float @onready var _pressing_lean_rad := Vector2( deg_to_rad(_pressing_lean_deg.x), deg_to_rad(_pressing_lean_deg.y) @@ -105,6 +108,16 @@ func emit_key_press(game_key: GameKey, event: InputEventKey) -> void: key_press_changed.emit(game_key, event) +func request_keys(filter_func: Callable) -> void: + _requested_keys = [] + keys_requested.emit(filter_func) + _requested_keys = [] + + +func key_request_respond(game_key: GameKey) -> void: + _requested_keys.append(game_key) + + #endregion