Files
MovementTests/addons/gdUnit4/src/ui/settings/GdUnitInputCapture.gd
Minimata c28d97de2d
Some checks failed
Create tag and build when new code gets to main / Export (push) Failing after 3m40s
setting up GDUnit
2026-01-25 18:19:26 +01:00

57 lines
1.6 KiB
GDScript

@tool
class_name GdUnitInputCapture
extends Control
signal input_completed(input_event: InputEventKey)
var _tween: Tween
var _input_event: InputEventKey
func _ready() -> void:
reset()
self_modulate = Color.WHITE
_tween = create_tween()
@warning_ignore("return_value_discarded")
_tween.set_loops()
@warning_ignore("return_value_discarded")
_tween.tween_property(%Label, "self_modulate", Color(1, 1, 1, .8), 1.0).from_current().set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN_OUT)
func reset() -> void:
_input_event = InputEventKey.new()
func _input(event: InputEvent) -> void:
if not is_visible_in_tree():
return
if event is InputEventKey and event.is_pressed() and not event.is_echo():
var _event := event as InputEventKey
match _event.keycode:
KEY_CTRL:
_input_event.ctrl_pressed = true
KEY_SHIFT:
_input_event.shift_pressed = true
KEY_ALT:
_input_event.alt_pressed = true
KEY_META:
_input_event.meta_pressed = true
_:
_input_event.keycode = _event.keycode
_apply_input_modifiers(_event)
accept_event()
if event is InputEventKey and not event.is_pressed():
input_completed.emit(_input_event)
hide()
func _apply_input_modifiers(event: InputEvent) -> void:
if event is InputEventWithModifiers:
var _event := event as InputEventWithModifiers
_input_event.meta_pressed = _event.meta_pressed or _input_event.meta_pressed
_input_event.alt_pressed = _event.alt_pressed or _input_event.alt_pressed
_input_event.shift_pressed = _event.shift_pressed or _input_event.shift_pressed
_input_event.ctrl_pressed = _event.ctrl_pressed or _input_event.ctrl_pressed