mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
feat(*): Style the results screen and dock the heading tape under the scoreboard
This commit is contained in:
+26
-6
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://c8kak2l3m4n5"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://c8kak2l3m4n5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://du7y176h5aaq4" path="res://scripts/HUDController.gd" id="1_hud_controller"]
|
||||
[ext_resource type="Script" path="res://scripts/hud_attitude_indicator.gd" id="2_adi"]
|
||||
@@ -22,6 +22,22 @@ content_margin_top = 8.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 8.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_result"]
|
||||
bg_color = Color(0.05, 0.06, 0.09, 0.85)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 3
|
||||
border_color = Color(1, 1, 1, 0.2)
|
||||
corner_radius_top_left = 20
|
||||
corner_radius_top_right = 20
|
||||
corner_radius_bottom_right = 20
|
||||
corner_radius_bottom_left = 20
|
||||
content_margin_left = 48.0
|
||||
content_margin_top = 32.0
|
||||
content_margin_right = 48.0
|
||||
content_margin_bottom = 32.0
|
||||
|
||||
[node name="HUD" type="CanvasLayer"]
|
||||
process_mode = 3
|
||||
script = ExtResource("1_hud_controller")
|
||||
@@ -134,19 +150,23 @@ anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Control/ResultOverlay/Center"]
|
||||
[node name="ResultPanel" type="PanelContainer" parent="Control/ResultOverlay/Center"]
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_result")
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Control/ResultOverlay/Center/ResultPanel"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="ResultLabel" type="Label" parent="Control/ResultOverlay/Center/VBox"]
|
||||
[node name="ResultLabel" type="Label" parent="Control/ResultOverlay/Center/ResultPanel/VBox"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 56
|
||||
theme_override_font_sizes/font_size = 64
|
||||
text = "Draw"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="FinalScoreLabel" type="Label" parent="Control/ResultOverlay/Center/VBox"]
|
||||
[node name="FinalScoreLabel" type="Label" parent="Control/ResultOverlay/Center/ResultPanel/VBox"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 36
|
||||
theme_override_font_sizes/font_size = 44
|
||||
text = "0 - 0"
|
||||
horizontal_alignment = 1
|
||||
|
||||
|
||||
@@ -13,8 +13,9 @@ class_name HUDController
|
||||
@onready var team1_name_label = get_node_or_null("Control/ScoreboardPanel/ScoreRow/Team1Name")
|
||||
@onready var kickoff_label = get_node_or_null("Control/KickoffLabel")
|
||||
@onready var result_overlay = get_node_or_null("Control/ResultOverlay")
|
||||
@onready var result_label = get_node_or_null("Control/ResultOverlay/Center/VBox/ResultLabel")
|
||||
@onready var final_score_label = get_node_or_null("Control/ResultOverlay/Center/VBox/FinalScoreLabel")
|
||||
@onready var result_panel = get_node_or_null("Control/ResultOverlay/Center/ResultPanel")
|
||||
@onready var result_label = get_node_or_null("Control/ResultOverlay/Center/ResultPanel/VBox/ResultLabel")
|
||||
@onready var final_score_label = get_node_or_null("Control/ResultOverlay/Center/ResultPanel/VBox/FinalScoreLabel")
|
||||
|
||||
@onready var heading_tape: HudHeadingTape = get_node_or_null("Control/Instruments/HeadingTape")
|
||||
@onready var attitude_indicator: HudAttitudeIndicator = get_node_or_null("Control/Instruments/Cluster/Dials/AttitudeIndicator")
|
||||
@@ -166,8 +167,35 @@ func _on_match_ended(winning_team: int, score: Dictionary):
|
||||
if winning_team < 0:
|
||||
result_label.text = "Draw"
|
||||
result_label.remove_theme_color_override("font_color")
|
||||
_set_result_panel_accent(Color(1, 1, 1, 0.2))
|
||||
else:
|
||||
result_label.text = "%s team wins!" % TEAM_NAMES[winning_team]
|
||||
result_label.add_theme_color_override("font_color", TEAM_COLORS[winning_team])
|
||||
_set_result_panel_accent(TEAM_COLORS[winning_team])
|
||||
final_score_label.text = "%d - %d" % [score.get(0, 0), score.get(1, 0)]
|
||||
result_overlay.visible = true
|
||||
_animate_result_panel_in()
|
||||
|
||||
# Tints the result panel's border to match the winning team (neutral for a draw).
|
||||
func _set_result_panel_accent(color: Color) -> void:
|
||||
if not result_panel or not is_instance_valid(result_panel):
|
||||
return
|
||||
var style: StyleBoxFlat = result_panel.get_theme_stylebox("panel").duplicate()
|
||||
style.border_color = color
|
||||
result_panel.add_theme_stylebox_override("panel", style)
|
||||
|
||||
# Quick scale/fade pop so the results screen doesn't just snap into view.
|
||||
func _animate_result_panel_in() -> void:
|
||||
if not result_panel or not is_instance_valid(result_panel):
|
||||
return
|
||||
result_panel.scale = Vector2(0.85, 0.85)
|
||||
result_panel.modulate.a = 0.0
|
||||
# ResultOverlay was hidden since scene start, so ResultPanel's
|
||||
# container-computed size isn't valid until the next layout pass.
|
||||
await get_tree().process_frame
|
||||
if not is_instance_valid(result_panel):
|
||||
return
|
||||
result_panel.pivot_offset = result_panel.size / 2.0
|
||||
var tween := create_tween().set_parallel(true)
|
||||
tween.tween_property(result_panel, "scale", Vector2.ONE, 0.25).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT)
|
||||
tween.tween_property(result_panel, "modulate:a", 1.0, 0.2)
|
||||
|
||||
Reference in New Issue
Block a user