Skip to content

Commit e11701f

Browse files
matteopolakCopilot
andcommitted
feat: move leaderboards into speedrun modes
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 9dbb5603-34d4-46e7-91ce-d0a49488bf15 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 014c050 commit e11701f

3 files changed

Lines changed: 92 additions & 67 deletions

File tree

src/menus/main/main_menu.tscn

Lines changed: 76 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@
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-
3027
[sub_resource type="FastNoiseLite" id="FastNoiseLite_3dplo"]
3128

3229
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_iyvra"]
@@ -159,8 +156,8 @@ grow_horizontal = 2
159156
grow_vertical = 2
160157
theme = ExtResource("1_wwn1r")
161158
script = ExtResource("1_cput1")
162-
target_practice_leaderboard = NodePath("MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer/TargetPracticeLeaderboard")
163-
movement_only_leaderboard = NodePath("MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer2/MovementOnlyLeaderboard")
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")
164161

165162
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=1955005440]
166163
layout_mode = 1
@@ -275,82 +272,114 @@ mode = "target"
275272
metadata/_custom_type_script = "uid://be34vbfubnjti"
276273
metadata/_tab_index = 0
277274

278-
[node name="Movement Only" type="Control" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher" unique_id=868796938]
279-
visible = false
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]
280284
layout_mode = 2
281-
script = ExtResource("5_0gscq")
282-
mode = "bhop"
283-
metadata/_custom_type_script = "uid://be34vbfubnjti"
284-
metadata/_tab_index = 1
285+
size_flags_vertical = 3
285286

286-
[node name="Aim Trainer" parent="MarginContainer/Content/Body" unique_id=792485455 instance=ExtResource("17_aim")]
287-
visible = false
287+
[node name="MapMargin" type="MarginContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Target Practice/Content/MapScroll" unique_id=100000003]
288288
layout_mode = 2
289-
metadata/_tab_index = 1
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
290294

291-
[node name="Server Browser" parent="MarginContainer/Content/Body" unique_id=1793080607 instance=ExtResource("6_og6j4")]
292-
visible = false
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]
293302
layout_mode = 2
294-
metadata/_tab_index = 2
295303

296-
[node name="Leaderboard" type="Control" parent="MarginContainer/Content/Body" unique_id=1078392968]
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+
318+
[node name="Movement Only" type="Control" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher" unique_id=868796938]
297319
visible = false
298320
layout_mode = 2
299-
metadata/_tab_index = 3
321+
script = ExtResource("5_0gscq")
322+
mode = "bhop"
323+
metadata/_custom_type_script = "uid://be34vbfubnjti"
324+
metadata/_tab_index = 1
300325

301-
[node name="Overall" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard" unique_id=1926363149]
326+
[node name="Content" type="VBoxContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only" unique_id=100000008]
302327
layout_mode = 1
303-
anchors_preset = 8
304-
anchor_left = 0.5
305-
anchor_top = 0.5
306-
anchor_right = 0.5
307-
anchor_bottom = 0.5
308-
offset_left = -110.0
309-
offset_top = -18.0
310-
offset_right = 110.0
311-
offset_bottom = 18.0
328+
anchors_preset = 15
329+
anchor_right = 1.0
330+
anchor_bottom = 1.0
312331
grow_horizontal = 2
313332
grow_vertical = 2
314-
theme_override_constants/separation = 20
315-
316-
[node name="H" type="HBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall" unique_id=257135821]
317-
layout_mode = 2
318-
theme = SubResource("Theme_og6j4")
319-
theme_override_constants/separation = 50
320333

321-
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall/H" unique_id=1128228830]
334+
[node name="MapScroll" type="ScrollContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content" unique_id=100000009]
322335
layout_mode = 2
336+
size_flags_vertical = 3
323337

324-
[node name="Label" type="Label" parent="MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer" unique_id=637673176]
338+
[node name="MapMargin" type="MarginContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/MapScroll" unique_id=100000010]
325339
layout_mode = 2
326-
theme_override_font_sizes/font_size = 25
327-
text = "Target Practice"
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
328345

329-
[node name="TargetPracticeLeaderboard" type="VBoxContainer" parent="MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer" unique_id=1291506203]
346+
[node name="MapContainer" type="HFlowContainer" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/MapScroll/MapMargin" unique_id=100000011]
330347
layout_mode = 2
348+
size_flags_horizontal = 3
349+
theme_override_constants/h_separation = 15
350+
theme_override_constants/v_separation = 15
331351

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

335-
[node name="Label" type="Label" parent="MarginContainer/Content/Body/Leaderboard/Overall/H/VBoxContainer2" unique_id=2137644706]
355+
[node name="Heading" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/OverallLeaderboard" unique_id=100000013]
336356
layout_mode = 2
337-
theme_override_font_sizes/font_size = 25
338-
text = "Movement Only"
357+
text = "Overall Leaderboard"
339358

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

343-
[node name="Label" type="Label" parent="MarginContainer/Content/Body/Leaderboard/Overall" unique_id=1815162472]
362+
[node name="ExplanationText" type="Label" parent="MarginContainer/Content/Body/Speedrun/M/V/ModeSwitcher/Movement Only/Content/OverallLeaderboard" unique_id=100000014]
344363
layout_mode = 2
345364
theme_override_font_sizes/font_size = 13
346365
text = "Points are given based on runs in the top 10.
347366
1st place is 10 points, 2nd place is 9 points, etc.."
348367
horizontal_alignment = 1
349368

369+
[node name="Aim Trainer" parent="MarginContainer/Content/Body" unique_id=792485455 instance=ExtResource("17_aim")]
370+
visible = false
371+
layout_mode = 2
372+
metadata/_tab_index = 1
373+
374+
[node name="Server Browser" parent="MarginContainer/Content/Body" unique_id=1793080607 instance=ExtResource("6_og6j4")]
375+
visible = false
376+
layout_mode = 2
377+
metadata/_tab_index = 2
378+
350379
[node name="Settings" type="Control" parent="MarginContainer/Content/Body" unique_id=1145642441]
351380
visible = false
352381
layout_mode = 2
353-
metadata/_tab_index = 4
382+
metadata/_tab_index = 3
354383

355384
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/Content/Body/Settings" unique_id=199957781]
356385
layout_mode = 1

src/menus/main/mode_container.gd

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,7 @@ 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-
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)
6+
@onready var map_container: HFlowContainer = $Content/MapScroll/MapMargin/MapContainer
267

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

tests/aim_menu_smoke.gd

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,21 @@ func _run() -> void:
5656
main_menu.has_node("MarginContainer/Content/Body/Aim Trainer"),
5757
"Main menu should expose an Aim Trainer tab",
5858
)
59+
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"
62+
_check(
63+
main_menu.has_node(target_leaderboard_path),
64+
"Target Practice should expose its overall leaderboard below the map list",
65+
)
66+
_check(
67+
main_menu.has_node(movement_leaderboard_path),
68+
"Movement Only should expose its overall leaderboard below the map list",
69+
)
70+
_check(
71+
not main_menu.has_node("MarginContainer/Content/Body/Leaderboard"),
72+
"Main menu should not expose a separate Leaderboard tab",
73+
)
5974

6075
var global_node = root.get_node_or_null("Global")
6176
_check(global_node != null, "Global autoload should exist during the smoke test")

0 commit comments

Comments
 (0)