mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-12 20:52:06 +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" 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"]
|
[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_right = 20.0
|
||||||
content_margin_bottom = 8.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"]
|
[node name="HUD" type="CanvasLayer"]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
script = ExtResource("1_hud_controller")
|
script = ExtResource("1_hud_controller")
|
||||||
@@ -134,19 +150,23 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 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
|
layout_mode = 2
|
||||||
theme_override_constants/separation = 16
|
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
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 56
|
theme_override_font_sizes/font_size = 64
|
||||||
text = "Draw"
|
text = "Draw"
|
||||||
horizontal_alignment = 1
|
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
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 36
|
theme_override_font_sizes/font_size = 44
|
||||||
text = "0 - 0"
|
text = "0 - 0"
|
||||||
horizontal_alignment = 1
|
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 team1_name_label = get_node_or_null("Control/ScoreboardPanel/ScoreRow/Team1Name")
|
||||||
@onready var kickoff_label = get_node_or_null("Control/KickoffLabel")
|
@onready var kickoff_label = get_node_or_null("Control/KickoffLabel")
|
||||||
@onready var result_overlay = get_node_or_null("Control/ResultOverlay")
|
@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 result_panel = get_node_or_null("Control/ResultOverlay/Center/ResultPanel")
|
||||||
@onready var final_score_label = get_node_or_null("Control/ResultOverlay/Center/VBox/FinalScoreLabel")
|
@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 heading_tape: HudHeadingTape = get_node_or_null("Control/Instruments/HeadingTape")
|
||||||
@onready var attitude_indicator: HudAttitudeIndicator = get_node_or_null("Control/Instruments/Cluster/Dials/AttitudeIndicator")
|
@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:
|
if winning_team < 0:
|
||||||
result_label.text = "Draw"
|
result_label.text = "Draw"
|
||||||
result_label.remove_theme_color_override("font_color")
|
result_label.remove_theme_color_override("font_color")
|
||||||
|
_set_result_panel_accent(Color(1, 1, 1, 0.2))
|
||||||
else:
|
else:
|
||||||
result_label.text = "%s team wins!" % TEAM_NAMES[winning_team]
|
result_label.text = "%s team wins!" % TEAM_NAMES[winning_team]
|
||||||
result_label.add_theme_color_override("font_color", TEAM_COLORS[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)]
|
final_score_label.text = "%d - %d" % [score.get(0, 0), score.get(1, 0)]
|
||||||
result_overlay.visible = true
|
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