From def896809e64f9f60cc24f71a0963be39ba593a0 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Mon, 5 Jun 2023 19:21:24 +0200 Subject: [PATCH] fix: better activatorArea --- project.godot | 2 +- src/Contraptions/VendingMachine.gd | 5 ++-- src/Levels/1 Tut Level.tscn | 5 +--- src/Levels/New Tiles Level.tscn | 5 +++- src/UserInterface/Buttons/PlayButton.gd | 3 +++ .../Screens/ControlsMenu/ActionKeyList.gd | 1 + .../ControlScrollContainerFocus.gd | 6 +++++ .../Screens/ControlsMenu/ControlsMenu.gd | 4 +-- .../Screens/ControlsMenu/ControlsMenu.tscn | 27 ++++++++++++++++++- .../Screens/ControlsMenu/ProfilesMenu.gd | 1 + .../Screens/ControlsMenu/Reset.gd | 1 - src/UserInterface/Screens/LevelList.gd | 12 +++++++-- src/UserInterface/Screens/MainScreen.tscn | 14 ++++++++++ 13 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 src/UserInterface/Screens/ControlsMenu/ControlScrollContainerFocus.gd diff --git a/project.godot b/project.godot index 1c7428e..90bc7fe 100644 --- a/project.godot +++ b/project.godot @@ -229,7 +229,7 @@ duck={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":83,"unicode":0,"echo":false,"script":null) ] } -click={ +ui_click={ "deadzone": 0.5, "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) ] diff --git a/src/Contraptions/VendingMachine.gd b/src/Contraptions/VendingMachine.gd index b5a3312..17a6ec5 100644 --- a/src/Contraptions/VendingMachine.gd +++ b/src/Contraptions/VendingMachine.gd @@ -33,5 +33,6 @@ func _on_ActivatorArea_area_exited(area:Area2D) -> void: unactivatable_timer.start() func _on_Timer_timeout(): - $Label.visible = false - activatable = false + if($ActivatorArea.get_overlapping_bodies().size() == 0): + $Label.visible = false + activatable = false diff --git a/src/Levels/1 Tut Level.tscn b/src/Levels/1 Tut Level.tscn index dd5aff1..c6926b9 100644 --- a/src/Levels/1 Tut Level.tscn +++ b/src/Levels/1 Tut Level.tscn @@ -113,10 +113,7 @@ visible = true visible = true [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 0 - -[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 3 +frame = 1 [node name="Blobby" parent="." instance=ExtResource( 9 )] unique_name_in_owner = true diff --git a/src/Levels/New Tiles Level.tscn b/src/Levels/New Tiles Level.tscn index d72620c..38fa3ba 100644 --- a/src/Levels/New Tiles Level.tscn +++ b/src/Levels/New Tiles Level.tscn @@ -35,8 +35,11 @@ wait_time = 20.0 unique_name_in_owner = true drag_margin_bottom = 0.3 +[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] +frame = 4 + [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 12 +frame = 3 [node name="Blobby" parent="." instance=ExtResource( 7 )] unique_name_in_owner = true diff --git a/src/UserInterface/Buttons/PlayButton.gd b/src/UserInterface/Buttons/PlayButton.gd index d0ed646..ec9a19e 100644 --- a/src/UserInterface/Buttons/PlayButton.gd +++ b/src/UserInterface/Buttons/PlayButton.gd @@ -3,6 +3,9 @@ extends Button export(String, FILE) var next_scene_path: = "" onready var selected_level_base_path: String = "res://src/Levels/" +func _ready(): + self.grab_focus() + func _on_button_up() -> void: get_tree().change_scene(next_scene_path) get_tree().get_current_scene().queue_free() diff --git a/src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd b/src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd index 5dbf1e0..67fc543 100644 --- a/src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd +++ b/src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd @@ -9,5 +9,6 @@ func clear(): func add_input_line(action_name, event): var line = InputLine.instance() add_child(line) + line.focus_mode = Control.FOCUS_ALL line.initialize(action_name, event) return line diff --git a/src/UserInterface/Screens/ControlsMenu/ControlScrollContainerFocus.gd b/src/UserInterface/Screens/ControlsMenu/ControlScrollContainerFocus.gd new file mode 100644 index 0000000..f435cd0 --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/ControlScrollContainerFocus.gd @@ -0,0 +1,6 @@ +extends ScrollContainer + + +func _on_focus_entered(): + #get_child(0).get_child(0).grab_focus() + pass diff --git a/src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd index 53798e9..f87f2a5 100644 --- a/src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd +++ b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd @@ -7,12 +7,13 @@ func _ready(): $InputMapper.connect('profile_changed', self, 'rebuild') $InputMapper.initialize_profiles() $ProfilesMenu.initialize($InputMapper) + $ProfilesMenu.grab_focus() $InputMapper.change_profile($ProfilesMenu.selected) func rebuild(input_profile): _action_list.clear() for input_action in input_profile.keys(): - if(input_action.ends_with("_old")): + if(input_action.ends_with("_old") || input_action.begins_with(("ui_"))): continue var line = _action_list.add_input_line(input_action, input_profile[input_action]) line.connect('change_button_pressed', self, '_on_InputLine_change_button_pressed', [input_action, line]) @@ -28,4 +29,3 @@ func _on_InputLine_change_button_pressed(action_name, line): $InputMapper.change_action_key(action_name, old_event, event) line.update_key(event) set_process_input(true) - diff --git a/src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn index cb62f9c..14ffefe 100644 --- a/src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn +++ b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=23 format=2] +[gd_scene load_steps=24 format=2] [ext_resource path="res://assets/ui/Screenshot 2023-05-23 160521.png" type="Texture" id=1] [ext_resource path="res://src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd" type="Script" id=2] @@ -15,6 +15,7 @@ [ext_resource path="res://src/UserInterface/Screens/ControlsMenu/KeySelectMenu.gd" type="Script" id=13] [ext_resource path="res://src/UserInterface/Screens/ControlsMenu/SaveButton.gd" type="Script" id=14] [ext_resource path="res://src/UserInterface/Screens/ControlsMenu/Reset.gd" type="Script" id=15] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/ControlScrollContainerFocus.gd" type="Script" id=16] [sub_resource type="DynamicFont" id=1] size = 42 @@ -78,6 +79,8 @@ margin_right = 14.5 margin_bottom = 19.0 grow_horizontal = 2 grow_vertical = 2 +focus_neighbour_top = NodePath("../Back") +focus_neighbour_bottom = NodePath("../KeymapViewer/ScrollContainer") script = ExtResource( 2 ) [node name="Titel" type="Label" parent="."] @@ -162,11 +165,20 @@ valign = 1 margin_top = 25.0 margin_right = 552.0 margin_bottom = 202.0 +focus_neighbour_top = NodePath("../../ProfilesMenu") +focus_neighbour_bottom = NodePath("../../Save") +focus_previous = NodePath("../../Back") +focus_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +follow_focus = true +script = ExtResource( 16 ) [node name="ActionKeyList" type="VBoxContainer" parent="KeymapViewer/ScrollContainer"] unique_name_in_owner = true +margin_right = 552.0 +margin_bottom = 177.0 +focus_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 script = ExtResource( 3 ) @@ -181,6 +193,10 @@ margin_right = 75.0 grow_horizontal = 2 grow_vertical = 2 rect_min_size = Vector2( 40, 20 ) +focus_neighbour_left = NodePath("../Save") +focus_neighbour_top = NodePath("../KeymapViewer/ScrollContainer") +focus_neighbour_right = NodePath("../Reset") +focus_neighbour_bottom = NodePath("../ProfilesMenu") input_pass_on_modal_close_click = false size_flags_horizontal = 0 size_flags_vertical = 0 @@ -199,6 +215,10 @@ margin_right = 37.5 grow_horizontal = 2 grow_vertical = 2 rect_min_size = Vector2( 40, 20 ) +focus_neighbour_left = NodePath("../Back") +focus_neighbour_top = NodePath("../KeymapViewer/ScrollContainer") +focus_neighbour_right = NodePath("../Save") +focus_neighbour_bottom = NodePath("../ProfilesMenu") input_pass_on_modal_close_click = false size_flags_horizontal = 0 size_flags_vertical = 0 @@ -215,6 +235,10 @@ margin_top = -25.0 grow_horizontal = 2 grow_vertical = 2 rect_min_size = Vector2( 40, 20 ) +focus_neighbour_left = NodePath("../Reset") +focus_neighbour_top = NodePath("../KeymapViewer/ScrollContainer") +focus_neighbour_right = NodePath("../Back") +focus_neighbour_bottom = NodePath("../ProfilesMenu") input_pass_on_modal_close_click = false size_flags_horizontal = 0 size_flags_vertical = 0 @@ -277,6 +301,7 @@ Smile -> Save changes and leave" align = 1 valign = 1 +[connection signal="focus_entered" from="KeymapViewer/ScrollContainer" to="KeymapViewer/ScrollContainer" method="_on_focus_entered"] [connection signal="button_up" from="Back" to="Back" method="_on_button_up"] [connection signal="button_up" from="Reset" to="Reset" method="_on_button_up"] [connection signal="button_up" from="Save" to="Save" method="_on_button_up"] diff --git a/src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd b/src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd index b7fa2dd..d539e60 100644 --- a/src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd +++ b/src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd @@ -1,5 +1,6 @@ extends OptionButton + func initialize(input_mapper): for profile_index in input_mapper.profiles: var profile_name = input_mapper.profiles[profile_index].capitalize() diff --git a/src/UserInterface/Screens/ControlsMenu/Reset.gd b/src/UserInterface/Screens/ControlsMenu/Reset.gd index 733e1fb..6df0032 100644 --- a/src/UserInterface/Screens/ControlsMenu/Reset.gd +++ b/src/UserInterface/Screens/ControlsMenu/Reset.gd @@ -1,6 +1,5 @@ extends Button -onready var signalManager := get_tree().root.get_child(3).get_node("%SignalManager") onready var mapper := $"%InputMapper" func _on_button_up() -> void: diff --git a/src/UserInterface/Screens/LevelList.gd b/src/UserInterface/Screens/LevelList.gd index 0edb029..d6cbb7b 100644 --- a/src/UserInterface/Screens/LevelList.gd +++ b/src/UserInterface/Screens/LevelList.gd @@ -24,9 +24,17 @@ func _fill_level_list(): _spawn_level_options(levels) func _spawn_level_options(levels: Array): + var first = true for level in levels: var check_box = CheckBox.new() + if first: + $"%PlayButton".focus_neighbour_right = check_box.get_path() + $"%Controlls".focus_neighbour_right = check_box.get_path() + $"%QuitButton".focus_neighbour_right = check_box.get_path() + first = false + check_box.focus_mode = Control.FOCUS_ALL + check_box.focus_neighbour_left = $"%PlayButton".get_path() check_box.text = level.trim_suffix(".tscn") - check_box.set_button_group(BUTTON_GROUP); + check_box.set_button_group(BUTTON_GROUP) vbox.add_child(check_box) - return \ No newline at end of file + return diff --git a/src/UserInterface/Screens/MainScreen.tscn b/src/UserInterface/Screens/MainScreen.tscn index 9ece492..5cce5b9 100644 --- a/src/UserInterface/Screens/MainScreen.tscn +++ b/src/UserInterface/Screens/MainScreen.tscn @@ -66,41 +66,55 @@ margin_bottom = 88.0 [node name="Buttons" type="VBoxContainer" parent="MenuContainer"] margin_right = 296.0 margin_bottom = 100.0 +focus_mode = 2 size_flags_horizontal = 3 [node name="PlayButton" parent="MenuContainer/Buttons" instance=ExtResource( 3 )] +unique_name_in_owner = true margin_right = 296.0 margin_bottom = 30.0 +focus_neighbour_top = NodePath("../QuitButton") +focus_neighbour_bottom = NodePath("../Controlls") [node name="Controlls" parent="MenuContainer/Buttons" instance=ExtResource( 3 )] +unique_name_in_owner = true margin_top = 34.0 margin_right = 296.0 margin_bottom = 65.0 +focus_neighbour_top = NodePath("../PlayButton") +focus_neighbour_bottom = NodePath("../QuitButton") text = "Controls" script = ExtResource( 10 ) next_screen_path = "res://src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn" [node name="QuitButton" parent="MenuContainer/Buttons" instance=ExtResource( 1 )] +unique_name_in_owner = true anchor_left = 0.0 anchor_right = 0.0 margin_left = 0.0 margin_top = 69.0 margin_right = 296.0 margin_bottom = 100.0 +focus_neighbour_top = NodePath("../Controlls") +focus_neighbour_bottom = NodePath("../PlayButton") [node name="LevelList" type="ScrollContainer" parent="MenuContainer"] margin_left = 300.0 margin_right = 300.0 margin_bottom = 100.0 +focus_mode = 2 +follow_focus = true scroll_horizontal_enabled = false script = ExtResource( 6 ) [node name="VBoxContainer" type="VBoxContainer" parent="MenuContainer/LevelList"] +focus_mode = 2 [node name="InvisibleCunt" type="CheckBox" parent="MenuContainer/LevelList/VBoxContainer"] visible = false margin_right = 24.0 margin_bottom = 24.0 +focus_neighbour_left = NodePath("../../../Buttons/PlayButton") group = ExtResource( 7 ) [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]