add ability to get keyboard keys by filter

This commit is contained in:
Teatov 2025-08-02 10:39:33 +10:00
parent 2d966647d2
commit a6e31e55ed
2 changed files with 22 additions and 2 deletions

View File

@ -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

View File

@ -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