Skip to content

Commit bde200c

Browse files
committed
refactor: move speedrun rankings into tab
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 9dbb5603-34d4-46e7-91ce-d0a49488bf15
1 parent e11701f commit bde200c

4 files changed

Lines changed: 76 additions & 73 deletions

File tree

src/menus/main/main_menu.gd

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,11 @@ func _ready() -> void:
5656
func _instantiate_maps() -> void:
5757
var mode_to_container: Dictionary[String, ModeContainer]
5858

59-
for child: ModeContainer in mode_switcher.get_children():
60-
mode_to_container[child.mode] = child
59+
for child in mode_switcher.get_children():
60+
if child is not ModeContainer:
61+
continue
62+
var mode_container := child as ModeContainer
63+
mode_to_container[mode_container.mode] = mode_container
6164

6265
mode_to_container[Global.game_manager.current_mode].visible = true
6366

src/menus/main/main_menu.tscn

Lines changed: 37 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_yrkwj"]
2525
size = Vector2(64, 64)
2626

27+
[sub_resource type="Theme" id="Theme_og6j4"]
28+
default_font_size = 20
29+
2730
[sub_resource type="FastNoiseLite" id="FastNoiseLite_3dplo"]
2831

2932
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_iyvra"]
@@ -156,8 +159,8 @@ grow_horizontal = 2
156159
grow_vertical = 2
157160
theme = ExtResource("1_wwn1r")
158161
script = ExtResource("1_cput1")
159-
target_practice_leaderboard = NodePath("MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content/OverallLeaderboard/TargetPracticeLeaderboard")
160-
movement_only_leaderboard = NodePath("MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/OverallLeaderboard/MovementOnlyLeaderboard")
162+
target_practice_leaderboard = NodePath("MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer/TargetPracticeLeaderboard")
163+
movement_only_leaderboard = NodePath("MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer2/MovementOnlyLeaderboard")
161164

162165
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=1955005440]
163166
layout_mode = 1
@@ -272,49 +275,6 @@ mode = "target"
272275
metadata/_custom_type_script = "uid://be34vbfubnjti"
273276
metadata/_tab_index = 0
274277

275-
[node name="Content" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice" unique_id=100000001]
276-
layout_mode = 1
277-
anchors_preset = 15
278-
anchor_right = 1.0
279-
anchor_bottom = 1.0
280-
grow_horizontal = 2
281-
grow_vertical = 2
282-
283-
[node name="MapScroll" type="ScrollContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content" unique_id=100000002]
284-
layout_mode = 2
285-
size_flags_vertical = 3
286-
287-
[node name="MapMargin" type="MarginContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content/MapScroll" unique_id=100000003]
288-
layout_mode = 2
289-
size_flags_horizontal = 3
290-
theme_override_constants/margin_left = 20
291-
theme_override_constants/margin_top = 20
292-
theme_override_constants/margin_right = 20
293-
theme_override_constants/margin_bottom = 20
294-
295-
[node name="MapContainer" type="HFlowContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content/MapScroll/MapMargin" unique_id=100000004]
296-
layout_mode = 2
297-
size_flags_horizontal = 3
298-
theme_override_constants/h_separation = 15
299-
theme_override_constants/v_separation = 15
300-
301-
[node name="OverallLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content" unique_id=100000005]
302-
layout_mode = 2
303-
304-
[node name="Heading" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content/OverallLeaderboard" unique_id=100000006]
305-
layout_mode = 2
306-
text = "Overall Leaderboard"
307-
308-
[node name="TargetPracticeLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content/OverallLeaderboard" unique_id=100000015]
309-
layout_mode = 2
310-
311-
[node name="ExplanationText" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content/OverallLeaderboard" unique_id=100000007]
312-
layout_mode = 2
313-
theme_override_font_sizes/font_size = 13
314-
text = "Points are given based on runs in the top 10.
315-
1st place is 10 points, 2nd place is 9 points, etc.."
316-
horizontal_alignment = 1
317-
318278
[node name="Movement Only" type="Control" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher" unique_id=868796938]
319279
visible = false
320280
layout_mode = 2
@@ -323,43 +283,54 @@ mode = "bhop"
323283
metadata/_custom_type_script = "uid://be34vbfubnjti"
324284
metadata/_tab_index = 1
325285

326-
[node name="Content" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only" unique_id=100000008]
286+
[node name="Leaderboard" type="Control" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher" unique_id=1078392968]
287+
visible = false
288+
layout_mode = 2
289+
metadata/_tab_index = 2
290+
291+
[node name="Overall" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard" unique_id=1926363149]
327292
layout_mode = 1
328-
anchors_preset = 15
329-
anchor_right = 1.0
330-
anchor_bottom = 1.0
293+
anchors_preset = 8
294+
anchor_left = 0.5
295+
anchor_top = 0.5
296+
anchor_right = 0.5
297+
anchor_bottom = 0.5
298+
offset_left = -110.0
299+
offset_top = -18.0
300+
offset_right = 110.0
301+
offset_bottom = 18.0
331302
grow_horizontal = 2
332303
grow_vertical = 2
304+
theme_override_constants/separation = 20
333305

334-
[node name="MapScroll" type="ScrollContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content" unique_id=100000009]
306+
[node name="H" type="HBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall" unique_id=257135821]
335307
layout_mode = 2
336-
size_flags_vertical = 3
308+
theme = SubResource("Theme_og6j4")
309+
theme_override_constants/separation = 50
337310

338-
[node name="MapMargin" type="MarginContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/MapScroll" unique_id=100000010]
311+
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H" unique_id=1128228830]
339312
layout_mode = 2
340-
size_flags_horizontal = 3
341-
theme_override_constants/margin_left = 20
342-
theme_override_constants/margin_top = 20
343-
theme_override_constants/margin_right = 20
344-
theme_override_constants/margin_bottom = 20
345313

346-
[node name="MapContainer" type="HFlowContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/MapScroll/MapMargin" unique_id=100000011]
314+
[node name="Label" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer" unique_id=637673176]
315+
layout_mode = 2
316+
theme_override_font_sizes/font_size = 25
317+
text = "Target Practice"
318+
319+
[node name="TargetPracticeLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer" unique_id=1291506203]
347320
layout_mode = 2
348-
size_flags_horizontal = 3
349-
theme_override_constants/h_separation = 15
350-
theme_override_constants/v_separation = 15
351321

352-
[node name="OverallLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content" unique_id=100000012]
322+
[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H" unique_id=15554509]
353323
layout_mode = 2
354324

355-
[node name="Heading" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/OverallLeaderboard" unique_id=100000013]
325+
[node name="Label" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer2" unique_id=2137644706]
356326
layout_mode = 2
357-
text = "Overall Leaderboard"
327+
theme_override_font_sizes/font_size = 25
328+
text = "Movement Only"
358329

359-
[node name="MovementOnlyLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/OverallLeaderboard" unique_id=100000016]
330+
[node name="MovementOnlyLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall/H/VBoxContainer2" unique_id=257067248]
360331
layout_mode = 2
361332

362-
[node name="ExplanationText" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/OverallLeaderboard" unique_id=100000014]
333+
[node name="Label" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Leaderboard/Overall" unique_id=1815162472]
363334
layout_mode = 2
364335
theme_override_font_sizes/font_size = 13
365336
text = "Points are given based on runs in the top 10.

src/menus/main/mode_container.gd

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,26 @@ class_name ModeContainer extends Control
33
const MapButtonScene = preload("res://src/menus/main/map_button/map_button.tscn")
44

55
@export var mode: String
6-
@onready var map_container: HFlowContainer = $Content/MapScroll/MapMargin/MapContainer
6+
var map_container := HFlowContainer.new()
7+
8+
func _ready() -> void:
9+
var sc := ScrollContainer.new()
10+
sc.size_flags_vertical = Control.SIZE_EXPAND
11+
sc.set_anchors_preset(PRESET_FULL_RECT)
12+
add_child(sc)
13+
var margin_container := MarginContainer.new()
14+
var margin := 20
15+
margin_container.add_theme_constant_override("margin_left", margin)
16+
margin_container.add_theme_constant_override("margin_top", margin)
17+
margin_container.add_theme_constant_override("margin_right", margin)
18+
margin_container.add_theme_constant_override("margin_bottom", margin)
19+
sc.add_child(margin_container)
20+
margin_container.add_child(map_container)
21+
margin_container.size_flags_horizontal = Control.SIZE_EXPAND_FILL
22+
map_container.size_flags_horizontal = Control.SIZE_EXPAND_FILL
23+
24+
map_container.add_theme_constant_override("h_separation", 15)
25+
map_container.add_theme_constant_override("v_separation", 15)
726

827
func add_map(map: MapData, mode: String, pb: float, position: int, total: int) -> void:
928
var btn: MapButton = MapButtonScene.instantiate()

tests/aim_menu_smoke.gd

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,25 @@ func _run() -> void:
5757
"Main menu should expose an Aim Trainer tab",
5858
)
5959
var speedrun_modes_path := "MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher"
60-
var target_leaderboard_path := speedrun_modes_path + "/Target Practice/Content/OverallLeaderboard/TargetPracticeLeaderboard"
61-
var movement_leaderboard_path := speedrun_modes_path + "/Movement Only/Content/OverallLeaderboard/MovementOnlyLeaderboard"
60+
var speedrun_leaderboard_path := speedrun_modes_path + "/Leaderboard"
61+
var target_leaderboard_path := speedrun_leaderboard_path + "/Overall/H/VBoxContainer/TargetPracticeLeaderboard"
62+
var movement_leaderboard_path := speedrun_leaderboard_path + "/Overall/H/VBoxContainer2/MovementOnlyLeaderboard"
63+
var speedrun_modes = main_menu.get_node(speedrun_modes_path)
64+
_check(
65+
speedrun_modes.get_tab_count() == 3,
66+
"Speedrun should expose Target Practice, Movement Only, and Leaderboard tabs",
67+
)
68+
_check(
69+
main_menu.has_node(speedrun_leaderboard_path),
70+
"Speedrun should expose a dedicated leaderboard mode tab",
71+
)
6272
_check(
6373
main_menu.has_node(target_leaderboard_path),
64-
"Target Practice should expose its overall leaderboard below the map list",
74+
"Speedrun leaderboard tab should expose Target Practice rankings",
6575
)
6676
_check(
6777
main_menu.has_node(movement_leaderboard_path),
68-
"Movement Only should expose its overall leaderboard below the map list",
78+
"Speedrun leaderboard tab should expose Movement Only rankings",
6979
)
7080
_check(
7181
not main_menu.has_node("MarginContainer/Content/Body/Leaderboard"),

0 commit comments

Comments
 (0)