feat: add GUI enhancement for Leaderboard, and Timer
This commit is contained in:
@@ -51,9 +51,8 @@ var red_tint_overlay: ColorRect
|
||||
# Traffic Light / StopTimer Visuals
|
||||
var stop_timer_node: PanelContainer
|
||||
var stop_segments: Array[Panel] = []
|
||||
var lit_style: StyleBoxFlat
|
||||
var dim_style: StyleBoxFlat
|
||||
var red_style: StyleBoxFlat
|
||||
var empty_styles: Array[StyleBoxTexture] = []
|
||||
var filled_styles: Array[StyleBoxTexture] = []
|
||||
|
||||
func _ready():
|
||||
set_process(false)
|
||||
@@ -155,29 +154,19 @@ func _update_stop_timer_visuals():
|
||||
var hbox = stop_timer_node.get_node_or_null("HBox")
|
||||
if hbox:
|
||||
stop_segments.clear()
|
||||
empty_styles.clear()
|
||||
filled_styles.clear()
|
||||
for i in range(3):
|
||||
var seg = hbox.get_node_or_null("Segment%d" % i)
|
||||
if seg: stop_segments.append(seg)
|
||||
|
||||
# Prepare styles
|
||||
lit_style = StyleBoxFlat.new()
|
||||
lit_style.bg_color = Color.YELLOW
|
||||
lit_style.border_width_left = 2
|
||||
lit_style.border_width_top = 2
|
||||
lit_style.border_width_right = 2
|
||||
lit_style.border_width_bottom = 2
|
||||
lit_style.border_color = Color(1.0, 1.0, 1.0, 0.5)
|
||||
|
||||
dim_style = StyleBoxFlat.new()
|
||||
dim_style.bg_color = Color(0.1, 0.1, 0.1, 0.8) # Dark dim
|
||||
|
||||
red_style = StyleBoxFlat.new()
|
||||
red_style.bg_color = Color.RED
|
||||
red_style.border_width_left = 2
|
||||
red_style.border_width_top = 2
|
||||
red_style.border_width_right = 2
|
||||
red_style.border_width_bottom = 2
|
||||
red_style.border_color = Color(1.0, 0.5, 0.5, 0.5)
|
||||
|
||||
var e_style = StyleBoxTexture.new()
|
||||
e_style.texture = load("res://assets/graphics/gui/stop_timer/Segment%d_empty.png" % i)
|
||||
empty_styles.append(e_style)
|
||||
|
||||
var f_style = StyleBoxTexture.new()
|
||||
f_style.texture = load("res://assets/graphics/gui/stop_timer/Segment%d_filled.png" % i)
|
||||
filled_styles.append(f_style)
|
||||
|
||||
if not stop_timer_node: return
|
||||
|
||||
@@ -185,17 +174,17 @@ func _update_stop_timer_visuals():
|
||||
stop_timer_node.visible = true
|
||||
|
||||
if current_phase == Phase.GO:
|
||||
# GO Phase: All dim unless in last 3 seconds (lights up 3, 2, 1s)
|
||||
# GO Phase: All empty unless in last 3 seconds (lights up 3, 2, 1s)
|
||||
for i in range(stop_segments.size()):
|
||||
var threshold = 3.0 - (i * 1.0)
|
||||
if phase_timer <= threshold:
|
||||
stop_segments[i].add_theme_stylebox_override("panel", lit_style)
|
||||
stop_segments[i].add_theme_stylebox_override("panel", filled_styles[i])
|
||||
else:
|
||||
stop_segments[i].add_theme_stylebox_override("panel", dim_style)
|
||||
stop_segments[i].add_theme_stylebox_override("panel", empty_styles[i])
|
||||
else:
|
||||
# STOP Phase: All Red
|
||||
for seg in stop_segments:
|
||||
seg.add_theme_stylebox_override("panel", red_style)
|
||||
for i in range(stop_segments.size()):
|
||||
stop_segments[i].add_theme_stylebox_override("panel", filled_styles[i])
|
||||
|
||||
func activate_client_side():
|
||||
is_active = true
|
||||
|
||||
@@ -321,17 +321,6 @@ func setup_leaderboard_ui(main_node):
|
||||
if not leaderboard_panel:
|
||||
push_warning("LeaderboardPanel node not found in scene")
|
||||
return
|
||||
|
||||
# Apply styling to the panel
|
||||
var style = StyleBoxFlat.new()
|
||||
style.bg_color = Color(0.08, 0.08, 0.12, 0.92)
|
||||
style.border_color = Color(0.85, 0.75, 0.25, 1.0) # Gold border
|
||||
style.set_border_width_all(2)
|
||||
style.corner_radius_top_left = 8
|
||||
style.corner_radius_top_right = 8
|
||||
style.corner_radius_bottom_left = 8
|
||||
style.corner_radius_bottom_right = 8
|
||||
leaderboard_panel.add_theme_stylebox_override("panel", style)
|
||||
|
||||
func _get_rank_text(rank: int) -> String:
|
||||
match rank:
|
||||
@@ -416,11 +405,11 @@ func initialize_leaderboard_with_players(players: Array):
|
||||
|
||||
if i < players.size():
|
||||
var player = players[i]
|
||||
var name_label = entry.get_node_or_null("NameLabel")
|
||||
var score_label = entry.get_node_or_null("ScoreLabel")
|
||||
var name_label = entry.get_node_or_null("SplitterContainer/SectionA/NameLabel")
|
||||
var score_label = entry.get_node_or_null("SplitterContainer/SectionB/ScoreLabel")
|
||||
var portrait_rect = entry.get_node_or_null("PortraitRect")
|
||||
var ghost_icon = entry.get_node_or_null("GhostIcon")
|
||||
var mini_powerup_bar = entry.get_node_or_null("MiniPowerUpBar")
|
||||
var ghost_icon = entry.get_node_or_null("SplitterContainer/SectionA/GhostIcon")
|
||||
var mini_powerup_bar = entry.get_node_or_null("SplitterContainer/SectionB/MiniPowerUpBar")
|
||||
|
||||
if name_label:
|
||||
# Use display_name if available, otherwise fallback to node name
|
||||
@@ -524,15 +513,15 @@ func update_live_leaderboard(players: Array):
|
||||
_: rank_label.text = str(rank) + "th"
|
||||
|
||||
if player and player.name == str(my_id):
|
||||
entry_root.modulate = Color(1.0, 1.0, 0.0) # Yellow
|
||||
entry_root.modulate = Color(0.3, 0.7, 1.0) # Blue highlight for local player
|
||||
else:
|
||||
entry_root.modulate = Color.WHITE
|
||||
|
||||
var score_label = entry.get_node_or_null("ScoreLabel")
|
||||
var ghost_icon = entry.get_node_or_null("GhostIcon")
|
||||
var mini_powerup_bar = entry.get_node_or_null("MiniPowerUpBar")
|
||||
var score_label = entry.get_node_or_null("SplitterContainer/SectionB/ScoreLabel")
|
||||
var ghost_icon = entry.get_node_or_null("SplitterContainer/SectionA/GhostIcon")
|
||||
var mini_powerup_bar = entry.get_node_or_null("SplitterContainer/SectionB/MiniPowerUpBar")
|
||||
var portrait_rect = entry.get_node_or_null("PortraitRect")
|
||||
var name_label = entry.get_node_or_null("NameLabel")
|
||||
var name_label = entry.get_node_or_null("SplitterContainer/SectionA/NameLabel")
|
||||
|
||||
if name_label:
|
||||
var default_name = player.name if player else "Unknown"
|
||||
|
||||
Reference in New Issue
Block a user