extends Node # Геймпад в меню паузы: фокус, A выбирает, крестовина двигает. func frames(n: int) -> void: for i in n: await get_tree().process_frame func btn(b: JoyButton, pressed: bool) -> void: var e := InputEventJoypadButton.new() e.button_index = b e.pressed = pressed Input.parse_input_event(e) func _ready() -> void: Net.nick_asked = true add_child((load("res://maps/hub/hub.tscn") as PackedScene).instantiate()) await frames(5) PauseMenu.open_menu() await frames(5) var f := get_viewport().gui_get_focus_owner() print("фокус: ", f, " текст: ", f.text if f else "—") btn(JOY_BUTTON_DPAD_DOWN, true); await frames(2); btn(JOY_BUTTON_DPAD_DOWN, false); await frames(2) f = get_viewport().gui_get_focus_owner() print("после вниз: ", f.text if f else "—") btn(JOY_BUTTON_DPAD_UP, true); await frames(2); btn(JOY_BUTTON_DPAD_UP, false); await frames(2) btn(JOY_BUTTON_A, true); await frames(2); btn(JOY_BUTTON_A, false); await frames(3) print("после A на «Продолжить»: меню открыто = ", PauseMenu.open) PauseMenu.open_menu(); await frames(5) btn(JOY_BUTTON_DPAD_DOWN, true); await frames(2); btn(JOY_BUTTON_DPAD_DOWN, false); await frames(2) btn(JOY_BUTTON_DPAD_DOWN, true); await frames(2); btn(JOY_BUTTON_DPAD_DOWN, false); await frames(2) btn(JOY_BUTTON_DPAD_DOWN, true); await frames(2); btn(JOY_BUTTON_DPAD_DOWN, false); await frames(2) f = get_viewport().gui_get_focus_owner() print("фокус перед A: ", f.text if f else "—") btn(JOY_BUTTON_A, true); await frames(2); btn(JOY_BUTTON_A, false); await frames(3) print("страница после A: ", PauseMenu._page) get_tree().quit()