diff --git a/Globals/translations.csv b/Globals/translations.csv index 00430d51..03ae918b 100644 --- a/Globals/translations.csv +++ b/Globals/translations.csv @@ -10,6 +10,7 @@ CONTROLS_TITLE_TYPE_QWER,QWERT,QWERT CONTROLS_TITLE_TYPE_ARROW,Arrow,箭头键 CONTROLS_TITLE_SELECTED,Selected,已选择 CONTROLS_WASD_BUTTON,WASD,WASD +CONTROLS_CONTROLLER_BUTTON,Controller,控制杆 CONTROLS_QWER_BUTTON,QWER,QWER CONTROLS_ARROW_BUTTON,Arrow Keys,箭头键 CONTROLS_RETURN_BUTTON,Return,返回 diff --git a/project.godot b/project.godot index c29c5c15..79c32531 100644 --- a/project.godot +++ b/project.godot @@ -39,10 +39,24 @@ project/assembly_name="Funk Engine" [game] -input_scheme="ARROWS" [input] +ui_accept={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null) +] +} +ui_cancel={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null) +] +} ui_left={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) @@ -75,55 +89,106 @@ ui_down={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) ] } -arrowUp={ +ARROWS_arrowUp={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":50,"key_label":0,"unicode":50,"location":0,"echo":false,"script":null) ] } -arrowDown={ +ARROWS_arrowDown={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":99,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":51,"key_label":0,"unicode":51,"location":0,"echo":false,"script":null) ] } -arrowLeft={ +ARROWS_arrowLeft={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":49,"key_label":0,"unicode":49,"location":0,"echo":false,"script":null) ] } -arrowRight={ +ARROWS_arrowRight={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":86,"key_label":0,"unicode":118,"location":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":52,"key_label":0,"unicode":52,"location":0,"echo":false,"script":null) ] } Pause={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null) ] } Inventory={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":true,"script":null) ] } Secondary={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null) +] +} +CONTROLLER_arrowUp={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":true,"script":null) +] +} +CONTROLLER_arrowDown={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null) +] +} +CONTROLLER_arrowLeft={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null) +] +} +CONTROLLER_arrowRight={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null) +] +} +WASD_arrowUp={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +WASD_arrowDown={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +WASD_arrowLeft={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +WASD_arrowRight={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +QWERT_arrowUp={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +QWERT_arrowDown={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +] +} +QWERT_arrowLeft={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) +] +} +QWERT_arrowRight={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) ] } diff --git a/scenes/ChartViewport/scripts/ChartManager.cs b/scenes/ChartViewport/scripts/ChartManager.cs index e6ebc908..b2ab47f0 100644 --- a/scenes/ChartViewport/scripts/ChartManager.cs +++ b/scenes/ChartViewport/scripts/ChartManager.cs @@ -96,7 +96,7 @@ public NoteArrow AddArrowToLane( ) { var newNote = CreateNote(type, note, beat); //TODO: Notes on track have unqiue visuals - var loopArrow = CreateNote(type, note, beat + BeatsPerLoop); //Create a dummy arrow for looping visuals + var loopArrow = CreateNote(type, note, beat, 1); //Create a dummy arrow for looping visuals if (colorOverride != default) { newNote.SelfModulate = colorOverride; @@ -106,7 +106,7 @@ public NoteArrow AddArrowToLane( return newNote; } - private NoteArrow CreateNote(ArrowType arrow, Note note, int beat = 0) + private NoteArrow CreateNote(ArrowType arrow, Note note, int beat = 0, int loopOffset = 0) { var noteScene = ResourceLoader.Load("res://scenes/NoteManager/note.tscn"); NoteArrow newArrow = noteScene.Instantiate(); @@ -114,7 +114,9 @@ private NoteArrow CreateNote(ArrowType arrow, Note note, int beat = 0) newArrow.OutlineSprite.Modulate = IH.Arrows[(int)arrow].Color; _arrowGroup.AddChild(newArrow); - newArrow.Bounds = (float)(beat / TrueBeatsPerLoop * (ChartLength / 2)); + newArrow.Bounds = (float)( + beat / TrueBeatsPerLoop * (ChartLength / 2) + loopOffset * (ChartLength / 2) + ); newArrow.Position += Vector2.Right * newArrow.Bounds * 10; //temporary fix for notes spawning and instantly calling loop from originating at 0,0 return newArrow; } diff --git a/scenes/NoteManager/scripts/InputHandler.cs b/scenes/NoteManager/scripts/InputHandler.cs index 1b6f32c5..f11b79fd 100644 --- a/scenes/NoteManager/scripts/InputHandler.cs +++ b/scenes/NoteManager/scripts/InputHandler.cs @@ -81,43 +81,32 @@ public void FeedbackEffect(ArrowType arrow, string text) public override void _Ready() { InitializeArrowCheckers(); - LoadControlScheme(); } - private void LoadControlScheme() + public override void _UnhandledInput(InputEvent @event) { - string scheme = SaveSystem.GetConfigValue(SaveSystem.ConfigSettings.InputKey).As(); - foreach (var arrow in Arrows) - { - var events = InputMap.ActionGetEvents(arrow.Key); - foreach (var inputEvent in events) - { - InputMap.ActionEraseEvent(arrow.Key, inputEvent); - } - } - - var selectedScheme = ControlSchemes.Schemes[scheme]; - foreach (var arrow in Arrows) + if (@event is InputEventJoypadButton) { - if (selectedScheme.ContainsKey(arrow.Key)) - { - InputEventKey eventKey = new InputEventKey(); - eventKey.Keycode = (Key)Enum.Parse(typeof(Key), selectedScheme[arrow.Key]); - InputMap.ActionAddEvent(arrow.Key, eventKey); - } + SaveSystem.UpdateConfig(SaveSystem.ConfigSettings.InputKey, "CONTROLLER"); } } public override void _Process(double delta) { + string scheme = SaveSystem.GetConfigValue(SaveSystem.ConfigSettings.InputKey).As(); + if (Input.GetConnectedJoypads().Count <= 0 && scheme == "CONTROLLER") + { + SaveSystem.UpdateConfig(SaveSystem.ConfigSettings.InputKey, "ARROWS"); + } + foreach (var arrow in Arrows) { - if (Input.IsActionJustPressed(arrow.Key)) + if (Input.IsActionJustPressed(scheme + "_" + arrow.Key)) { EmitSignal(nameof(NotePressed), (int)arrow.Type); arrow.Node.SetPressed(true); } - else if (Input.IsActionJustReleased(arrow.Key)) + else if (Input.IsActionJustReleased(scheme + "_" + arrow.Key)) { EmitSignal(nameof(NoteReleased), (int)arrow.Type); arrow.Node.SetPressed(false); diff --git a/scenes/Options/OptionsMenu.cs b/scenes/Options/OptionsMenu.cs index 587cb621..a245ea9a 100644 --- a/scenes/Options/OptionsMenu.cs +++ b/scenes/Options/OptionsMenu.cs @@ -48,7 +48,7 @@ public override void _Ready() public override void _Input(InputEvent @event) { - if (@event.IsActionPressed("Pause")) + if (@event.IsActionPressed("ui_cancel")) { CloseMenu(); GetViewport().SetInputAsHandled(); diff --git a/scenes/Remapping/ControlSchemes.cs b/scenes/Remapping/ControlSchemes.cs index 7d8ac898..3829747a 100644 --- a/scenes/Remapping/ControlSchemes.cs +++ b/scenes/Remapping/ControlSchemes.cs @@ -3,43 +3,6 @@ public static class ControlSchemes { - public static Dictionary> Schemes = new Dictionary< - string, - Dictionary - >() - { - { - "WASD", - new Dictionary() - { - { "arrowUp", "W" }, - { "arrowDown", "S" }, - { "arrowLeft", "A" }, - { "arrowRight", "D" }, - } - }, - { - "ARROWS", - new Dictionary() - { - { "arrowUp", "Up" }, - { "arrowDown", "Down" }, - { "arrowLeft", "Left" }, - { "arrowRight", "Right" }, - } - }, - { - "QWERT", - new Dictionary() - { - { "arrowUp", "W" }, - { "arrowDown", "E" }, - { "arrowLeft", "Q" }, - { "arrowRight", "R" }, - } - }, - }; - public static Dictionary> SpriteMappings = new Dictionary< string, Dictionary @@ -75,5 +38,15 @@ public static class ControlSchemes { "down", "res://scenes/Remapping/assets/E_Key_Light.png" }, } }, + { + "CONTROLLER", + new Dictionary() + { + { "left", "res://scenes/Remapping/assets/Positional_Prompts_Left.png" }, + { "right", "res://scenes/Remapping/assets/Positional_Prompts_Right.png" }, + { "up", "res://scenes/Remapping/assets/Positional_Prompts_Up.png" }, + { "down", "res://scenes/Remapping/assets/Positional_Prompts_Down.png" }, + } + }, }; } diff --git a/scenes/Remapping/ControlSettings.cs b/scenes/Remapping/ControlSettings.cs index 21d3d3b0..aaf99269 100644 --- a/scenes/Remapping/ControlSettings.cs +++ b/scenes/Remapping/ControlSettings.cs @@ -21,6 +21,8 @@ public partial class ControlSettings : Node2D [Export] private Button _closeButton; + private Button _controllerButton; + public override void _Ready() { GetNode