Use the shift review mockup as the end-of-shift backdrop

Wrap the review content in a Control root, draw the shift_review art behind an
opaque panel, and style the action buttons to match the mockup. Headless
226/226 verified in a clean HEAD worktree.
This commit is contained in:
zwitschi committed 2026-11-01 16:19:54 +01:00
1 parent 41d3511fc7
commit 00faf45e83
2 files changed
+34 -6

No files matched your search

+2 -1
View File
@@ -48,7 +48,8 @@ and scene visuals with those mockups — verified with
- [x] Wire the start menu and venue selection screen to use the `start_menu` scene art. - [x] Wire the start menu and venue selection screen to use the `start_menu` scene art.
- [x] Wire the pause overlay to `pause_overlay` scene art (backdrop + opaque panel cover). - [x] Wire the pause overlay to `pause_overlay` scene art (backdrop + opaque panel cover).
- [x] Wire the settings panel to `settings_panel` art. - [x] Wire the settings panel to `settings_panel` art.
- [ ] Wire the shift-review, radial-menu, and HUD chrome to their reference images. - [x] Wire the shift-review screen to `shift_review` art (backdrop + opaque panel cover).
- [ ] Wire the radial menu and HUD chrome to their reference images.
### Align in-game visuals ### Align in-game visuals
+32 -5
View File
@@ -3,6 +3,7 @@ extends CanvasLayer
## End-of-shift review screen (PLAN.md: Evidence and Body Camera, Shift Review). ## End-of-shift review screen (PLAN.md: Evidence and Body Camera, Shift Review).
const Strings := preload("res://src/core/strings.gd") const Strings := preload("res://src/core/strings.gd")
const UiArt := preload("res://src/game/ui/art.gd")
signal restart_requested() signal restart_requested()
signal timeline_requested(review: Dictionary) signal timeline_requested(review: Dictionary)
@@ -15,16 +16,23 @@ var report_label: Label
func _init() -> void: func _init() -> void:
name = "ShiftReview" name = "ShiftReview"
layer = 30 layer = 30
var dim := ColorRect.new() var root := Control.new()
dim.color = Color(0.04, 0.05, 0.08, 0.92) root.name = "ReviewRoot"
dim.set_anchors_preset(Control.PRESET_FULL_RECT) root.set_anchors_preset(Control.PRESET_FULL_RECT)
add_child(dim) add_child(root)
var art := UiArt.new()
if not art.add_screen_backdrop(root, "shift_review",
Rect2(0.172, 0.033, 0.59, 0.927)):
var dim := ColorRect.new()
dim.color = Color(0.04, 0.05, 0.08, 0.92)
dim.set_anchors_preset(Control.PRESET_FULL_RECT)
root.add_child(dim)
var center := VBoxContainer.new() var center := VBoxContainer.new()
center.set_anchors_preset(Control.PRESET_CENTER) center.set_anchors_preset(Control.PRESET_CENTER)
center.alignment = BoxContainer.ALIGNMENT_CENTER center.alignment = BoxContainer.ALIGNMENT_CENTER
center.add_theme_constant_override("separation", 12) center.add_theme_constant_override("separation", 12)
add_child(center) root.add_child(center)
var title := Label.new() var title := Label.new()
title.text = "Shift Review" title.text = "Shift Review"
@@ -55,8 +63,27 @@ func _init() -> void:
quit_btn.text = "Quit" quit_btn.text = "Quit"
quit_btn.pressed.connect(func(): get_tree().quit()) quit_btn.pressed.connect(func(): get_tree().quit())
quit_btn.size_flags_horizontal = Control.SIZE_SHRINK_CENTER quit_btn.size_flags_horizontal = Control.SIZE_SHRINK_CENTER
_style_review_button(timeline)
_style_review_button(restart)
_style_review_button(quit_btn)
center.add_child(quit_btn) center.add_child(quit_btn)
func _style_review_button(button: Button) -> void:
button.custom_minimum_size = Vector2(300, 52)
button.add_theme_font_size_override("font_size", 22)
var normal := StyleBoxFlat.new()
normal.bg_color = Color(0.115, 0.125, 0.15, 0.96)
normal.corner_radius_top_left = 10
normal.corner_radius_top_right = 10
normal.corner_radius_bottom_left = 10
normal.corner_radius_bottom_right = 10
var hover := normal.duplicate() as StyleBoxFlat
hover.bg_color = Color(0.16, 0.175, 0.21, 0.98)
button.add_theme_stylebox_override("normal", normal)
button.add_theme_stylebox_override("hover", hover)
button.add_theme_stylebox_override("focus", hover)
button.add_theme_stylebox_override("pressed", hover)
func show_review(review: Dictionary, scenario: Resource, history: Array = []) -> void: func show_review(review: Dictionary, scenario: Resource, history: Array = []) -> void:
_review = review _review = review
var reputation: Dictionary = review.get("reputation", {}) var reputation: Dictionary = review.get("reputation", {})