Relocates main_menu, character_creation, settings_dialog, debug_console,
bug_report_dialog, loading_screen from flat client/ui/ into structured
client/ui/meta/screens/<name>/. All six now extend MetaScreen instead
of Control; the base handles open/close lifecycle, visibility,
captures_input, and — for overlays — the sim-pause contract.
Screen policies set per Tyre's proposal:
- settings_dialog: pauses_sim=false, PUSHES onto MetaStack
- debug_console: pauses_sim=true, PUSHES (D-088 routing via base)
- bug_report_dialog: pauses_sim=true, PUSHES
- loading_screen: closable_by_escape=false, PUSHES
- main_menu, character_creation: scene-roots, extend MetaScreen for
the lifecycle contract only, do NOT push onto the stack
character_creation stays at its current surface (tabs, descriptor,
creation_confirmed signal unchanged). Tab consolidation and
CharacterProfile migration happen in Workstreams 5 and 6.
Knock-on changes:
- main.tscn ModalLayer CanvasLayer renamed to MetaLayer; main.gd
@onready refs updated; constants.gd comment updated; test_client_p3
and test_ui_framework_sprint15 assertions updated; test_monologue_display
and .tscn header comments updated.
- OPEN_MENU handler now pushes settings_dialog onto MetaStack before
calling open(). Full ESC priority chain lands in Workstream 4.
- atlas_app.gd: _unhandled_key_input signature widened from
InputEventKey to InputEvent with an is-check, per Godot 4 API. Pre-
existing narrowing was silently tolerated until main.tscn started
fully instantiating under the new pattern.
- test_client_p3: entity_renderer type annotations corrected from
ColorRect to Sprite2D (stale since a prior refactor); facing
indicator rotation assertion switched to angle_difference() for
modular-safe comparison.
Verification:
- gdlint client/scripts/ client/ui/ — zero problems
- godot --headless --path client --quit — no SCRIPT ERROR
- test_client_p3: 24/24 pass
- test_ui_framework_sprint15: 54/54 pass
- test_implant_nav_stack: 52/52 pass
- test_implant_registry: 42/42 pass
- test_implant_app_lifecycle: 36/36 pass
Workstream 1 foundation (84105916) remains unchanged. Workstreams 3-8
follow: protocol layer, Option A sequencing, 3-tab restructure,
Bookmark tab, location picker, Skills stub.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
125 lines
3.4 KiB
Plaintext
125 lines
3.4 KiB
Plaintext
[gd_scene load_steps=2 format=3 uid="uid://main_menu_sr"]
|
|
|
|
[ext_resource type="Script" path="res://ui/meta/screens/main_menu/main_menu.gd" id="1_mainmenu"]
|
|
|
|
; Main menu — New Game / Continue / Quit.
|
|
; #258: D-085 per-game save directory created on New Game.
|
|
|
|
[node name="MainMenu" type="Control"]
|
|
layout_mode = 3
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
script = ExtResource("1_mainmenu")
|
|
|
|
[node name="Background" type="ColorRect" parent="."]
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
color = Color(0.05, 0.05, 0.08, 1.0)
|
|
mouse_filter = 2
|
|
|
|
[node name="VBox" type="VBoxContainer" parent="."]
|
|
layout_mode = 1
|
|
anchors_preset = 8
|
|
anchor_left = 0.5
|
|
anchor_top = 0.5
|
|
anchor_right = 0.5
|
|
anchor_bottom = 0.5
|
|
offset_left = -120.0
|
|
offset_top = -80.0
|
|
offset_right = 120.0
|
|
offset_bottom = 100.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
theme_override_constants/separation = 16
|
|
alignment = 1
|
|
|
|
[node name="TitleLabel" type="Label" parent="VBox"]
|
|
layout_mode = 2
|
|
text = "THE SETTLED REACH"
|
|
horizontal_alignment = 1
|
|
theme_override_font_sizes/font_size = 36
|
|
theme_override_colors/font_color = Color(0.784, 0.816, 0.878, 1.0)
|
|
|
|
[node name="Spacer" type="Control" parent="VBox"]
|
|
layout_mode = 2
|
|
custom_minimum_size = Vector2(0, 24)
|
|
|
|
[node name="NewGameBtn" type="Button" parent="VBox"]
|
|
layout_mode = 2
|
|
text = "NEW GAME"
|
|
theme_override_font_sizes/font_size = 15
|
|
theme_override_colors/font_color = Color(0.906, 0.773, 0.278, 1.0)
|
|
|
|
[node name="ContinueBtn" type="Button" parent="VBox"]
|
|
layout_mode = 2
|
|
text = "CONTINUE"
|
|
theme_override_font_sizes/font_size = 15
|
|
theme_override_colors/font_color = Color(0.906, 0.773, 0.278, 1.0)
|
|
|
|
[node name="LoadGameBtn" type="Button" parent="VBox"]
|
|
layout_mode = 2
|
|
text = "LOAD GAME"
|
|
theme_override_font_sizes/font_size = 15
|
|
theme_override_colors/font_color = Color(0.906, 0.773, 0.278, 1.0)
|
|
|
|
[node name="QuitBtn" type="Button" parent="VBox"]
|
|
layout_mode = 2
|
|
text = "QUIT"
|
|
theme_override_font_sizes/font_size = 15
|
|
theme_override_colors/font_color = Color(0.533, 0.565, 0.627, 1.0)
|
|
|
|
[node name="LoadGamePanel" type="Control" parent="."]
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
visible = false
|
|
|
|
[node name="PanelBg" type="ColorRect" parent="LoadGamePanel"]
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
color = Color(0.05, 0.05, 0.08, 0.96)
|
|
mouse_filter = 2
|
|
|
|
[node name="VBox" type="VBoxContainer" parent="LoadGamePanel"]
|
|
layout_mode = 1
|
|
anchors_preset = 8
|
|
anchor_left = 0.5
|
|
anchor_top = 0.5
|
|
anchor_right = 0.5
|
|
anchor_bottom = 0.5
|
|
offset_left = -160.0
|
|
offset_top = -180.0
|
|
offset_right = 160.0
|
|
offset_bottom = 180.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
theme_override_constants/separation = 12
|
|
|
|
[node name="TitleLabel" type="Label" parent="LoadGamePanel/VBox"]
|
|
layout_mode = 2
|
|
text = "LOAD GAME"
|
|
horizontal_alignment = 1
|
|
theme_override_font_sizes/font_size = 20
|
|
theme_override_colors/font_color = Color(0.784, 0.816, 0.878, 1.0)
|
|
|
|
[node name="SavesScroll" type="ScrollContainer" parent="LoadGamePanel/VBox"]
|
|
layout_mode = 2
|
|
custom_minimum_size = Vector2(320, 240)
|
|
|
|
[node name="SavesList" type="VBoxContainer" parent="LoadGamePanel/VBox/SavesScroll"]
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
theme_override_constants/separation = 8
|
|
|
|
[node name="BackBtn" type="Button" parent="LoadGamePanel/VBox"]
|
|
layout_mode = 2
|
|
text = "BACK"
|
|
theme_override_font_sizes/font_size = 14
|
|
theme_override_colors/font_color = Color(0.533, 0.565, 0.627, 1.0)
|