TUI visual polish: felt table, status bar, scoreboard delay

- Dark green felt background for game screen
- Status bar: dark brown bg with amber text instead of blue
- YOUR TURN badge: green bg with white text instead of bright gold
- 3s delay before hole-complete scoreboard overlay
- Dealer indicator changed from Ⓓ to (D)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
adlee-was-taken 2026-02-25 21:56:01 -05:00
parent dfb3397dcb
commit 72eab2c811
4 changed files with 20 additions and 15 deletions

View File

@ -214,7 +214,10 @@ class GameScreen(Screen):
total_rounds = data.get("total_rounds", 1) total_rounds = data.get("total_rounds", 1)
finisher_id = data.get("finisher_id") finisher_id = data.get("finisher_id")
self.app.push_screen( # Delay so players can see the final card layout before the overlay
self.set_timer(
3.0,
lambda: self.app.push_screen(
ScoreboardScreen( ScoreboardScreen(
scores=scores, scores=scores,
title=f"Hole {round_num} Complete", title=f"Hole {round_num} Complete",
@ -225,6 +228,7 @@ class GameScreen(Screen):
finisher_id=finisher_id, finisher_id=finisher_id,
), ),
callback=self._on_scoreboard_dismiss, callback=self._on_scoreboard_dismiss,
),
) )
def _handle_game_over(self, data: dict) -> None: def _handle_game_over(self, data: dict) -> None:

View File

@ -245,6 +245,7 @@ LobbyScreen {
GameScreen { GameScreen {
align: center top; align: center top;
layout: vertical; layout: vertical;
background: #0a2a1a;
} }
#game-content { #game-content {
@ -257,8 +258,8 @@ GameScreen {
#status-bar { #status-bar {
height: 1; height: 1;
dock: top; dock: top;
background: $primary; background: #2a1a0a;
color: $text; color: #f4a460;
padding: 0 2; padding: 0 2;
} }

View File

@ -101,8 +101,8 @@ def render_player_box(
f"[{bc}]│[/] {line}{' ' * right_pad}[{bc}]│[/]" f"[{bc}]│[/] {line}{' ' * right_pad}[{bc}]│[/]"
) )
# Bottom border — dealer on left, OUT on right # Bottom border — dealer (D)on left, OUT on right
left_label = " " if is_dealer else "" left_label = " (D)" if is_dealer else ""
right_label = " OUT " if is_knocker else "" right_label = " OUT " if is_knocker else ""
mid_fill = max(1, inner - len(left_label) - len(right_label)) mid_fill = max(1, inner - len(left_label) - len(right_label))
parts = f"[{bc}]╰[/]" parts = f"[{bc}]╰[/]"

View File

@ -50,7 +50,7 @@ class StatusBarWidget(Static):
# Turn info (skip during initial flip - it's misleading) # Turn info (skip during initial flip - it's misleading)
if state.current_player_id and state.players and state.phase != "initial_flip": if state.current_player_id and state.players and state.phase != "initial_flip":
if state.current_player_id == self._player_id: if state.current_player_id == self._player_id:
parts.append("[bold #111111 on #ffd700] YOUR TURN! [/bold #111111 on #ffd700]") parts.append("[bold #ffffff on #2e7d32] YOUR TURN [/bold #ffffff on #2e7d32]")
else: else:
for p in state.players: for p in state.players:
if p.id == state.current_player_id: if p.id == state.current_player_id: