diff --git a/src/menus/main/main_menu.gd b/src/menus/main/main_menu.gd index 83fbf23..2ae2888 100644 --- a/src/menus/main/main_menu.gd +++ b/src/menus/main/main_menu.gd @@ -56,8 +56,11 @@ func _ready() -> void: func _instantiate_maps() -> void: var mode_to_container: Dictionary[String, ModeContainer] - for child: ModeContainer in mode_switcher.get_children(): - mode_to_container[child.mode] = child + for child in mode_switcher.get_children(): + if child is not ModeContainer: + continue + var mode_container := child as ModeContainer + mode_to_container[mode_container.mode] = mode_container mode_to_container[Global.game_manager.current_mode].visible = true diff --git a/src/menus/main/main_menu.tscn b/src/menus/main/main_menu.tscn index e510359..7c2dce7 100644 --- a/src/menus/main/main_menu.tscn +++ b/src/menus/main/main_menu.tscn @@ -159,8 +159,8 @@ grow_horizontal = 2 grow_vertical = 2 theme = ExtResource("1_wwn1r") script = ExtResource("1_cput1") -target_practice_leaderboard = NodePath("MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer/TargetPracticeLeaderboard") -movement_only_leaderboard = NodePath("MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer2/MovementOnlyLeaderboard") +target_practice_leaderboard = NodePath("MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer/TargetPracticeLeaderboard") +movement_only_leaderboard = NodePath("MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer2/MovementOnlyLeaderboard") [node name="MarginContainer" type="MarginContainer" parent="." unique_id=1955005440] layout_mode = 1 @@ -283,22 +283,12 @@ mode = "bhop" metadata/_custom_type_script = "uid://be34vbfubnjti" metadata/_tab_index = 1 -[node name="Aim Trainer" parent="MarginContainer/Content/Body" unique_id=792485455 instance=ExtResource("17_aim")] -visible = false -layout_mode = 2 -metadata/_tab_index = 1 - -[node name="Server Browser" parent="MarginContainer/Content/Body" unique_id=1793080607 instance=ExtResource("6_og6j4")] +[node name="Leaderboard" type="Control" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher" unique_id=1078392968] visible = false layout_mode = 2 metadata/_tab_index = 2 -[node name="Leaderboard" type="Control" parent="MarginContainer/Content/Body" unique_id=1078392968] -visible = false -layout_mode = 2 -metadata/_tab_index = 3 - -[node name="Overall" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard" unique_id=1926363149] +[node name="Overall" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard" unique_id=1926363149] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -313,44 +303,54 @@ grow_horizontal = 2 grow_vertical = 2 theme_override_constants/separation = 20 -[node name="H" type="HBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall" unique_id=257135821] +[node name="H" type="HBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall" unique_id=257135821] layout_mode = 2 theme = SubResource("Theme_og6j4") theme_override_constants/separation = 50 -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall/H" unique_id=1128228830] +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H" unique_id=1128228830] layout_mode = 2 -[node name="Label" type="Label" parent="MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer" unique_id=637673176] +[node name="Label" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer" unique_id=637673176] layout_mode = 2 theme_override_font_sizes/font_size = 25 text = "Target Practice" -[node name="TargetPracticeLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer" unique_id=1291506203] +[node name="TargetPracticeLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer" unique_id=1291506203] layout_mode = 2 -[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall/H" unique_id=15554509] +[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H" unique_id=15554509] layout_mode = 2 -[node name="Label" type="Label" parent="MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer2" unique_id=2137644706] +[node name="Label" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer2" unique_id=2137644706] layout_mode = 2 theme_override_font_sizes/font_size = 25 text = "Movement Only" -[node name="MovementOnlyLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer2" unique_id=257067248] +[node name="MovementOnlyLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer2" unique_id=257067248] layout_mode = 2 -[node name="Label" type="Label" parent="MarginContainer/Content/Body/Leaderboard/Overall" unique_id=1815162472] +[node name="Label" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall" unique_id=1815162472] layout_mode = 2 theme_override_font_sizes/font_size = 13 text = "Points are given based on runs in the top 10. 1st place is 10 points, 2nd place is 9 points, etc.." horizontal_alignment = 1 +[node name="Aim Trainer" parent="MarginContainer/Content/Body" unique_id=792485455 instance=ExtResource("17_aim")] +visible = false +layout_mode = 2 +metadata/_tab_index = 1 + +[node name="Server Browser" parent="MarginContainer/Content/Body" unique_id=1793080607 instance=ExtResource("6_og6j4")] +visible = false +layout_mode = 2 +metadata/_tab_index = 2 + [node name="Settings" type="Control" parent="MarginContainer/Content/Body" unique_id=1145642441] visible = false layout_mode = 2 -metadata/_tab_index = 4 +metadata/_tab_index = 3 [node name="MarginContainer" type="MarginContainer" parent="MarginContainer/Content/Body/Settings" unique_id=199957781] layout_mode = 1 diff --git a/tests/aim_menu_smoke.gd b/tests/aim_menu_smoke.gd index 236066b..84723f7 100644 --- a/tests/aim_menu_smoke.gd +++ b/tests/aim_menu_smoke.gd @@ -56,6 +56,31 @@ func _run() -> void: main_menu.has_node("MarginContainer/Content/Body/Aim Trainer"), "Main menu should expose an Aim Trainer tab", ) + var speedrun_modes_path := "MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher" + var speedrun_leaderboard_path := speedrun_modes_path + "/Leaderboard" + var target_leaderboard_path := speedrun_leaderboard_path + "/Overall/H/VBoxContainer/TargetPracticeLeaderboard" + var movement_leaderboard_path := speedrun_leaderboard_path + "/Overall/H/VBoxContainer2/MovementOnlyLeaderboard" + var speedrun_modes = main_menu.get_node(speedrun_modes_path) + _check( + speedrun_modes.get_tab_count() == 3, + "Speedrun should expose Target Practice, Movement Only, and Leaderboard tabs", + ) + _check( + main_menu.has_node(speedrun_leaderboard_path), + "Speedrun should expose a dedicated leaderboard mode tab", + ) + _check( + main_menu.has_node(target_leaderboard_path), + "Speedrun leaderboard tab should expose Target Practice rankings", + ) + _check( + main_menu.has_node(movement_leaderboard_path), + "Speedrun leaderboard tab should expose Movement Only rankings", + ) + _check( + not main_menu.has_node("MarginContainer/Content/Body/Leaderboard"), + "Main menu should not expose a separate Leaderboard tab", + ) var global_node = root.get_node_or_null("Global") _check(global_node != null, "Global autoload should exist during the smoke test")