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,17 +214,21 @@ class GameScreen(Screen):
total_rounds = data.get("total_rounds", 1)
finisher_id = data.get("finisher_id")
self.app.push_screen(
ScoreboardScreen(
scores=scores,
title=f"Hole {round_num} Complete",
is_game_over=False,
is_host=self._is_host,
round_num=round_num,
total_rounds=total_rounds,
finisher_id=finisher_id,
# Delay so players can see the final card layout before the overlay
self.set_timer(
3.0,
lambda: self.app.push_screen(
ScoreboardScreen(
scores=scores,
title=f"Hole {round_num} Complete",
is_game_over=False,
is_host=self._is_host,
round_num=round_num,
total_rounds=total_rounds,
finisher_id=finisher_id,
),
callback=self._on_scoreboard_dismiss,
),
callback=self._on_scoreboard_dismiss,
)
def _handle_game_over(self, data: dict) -> None:

View File

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

View File

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

View File

@ -50,7 +50,7 @@ class StatusBarWidget(Static):
# 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 == 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:
for p in state.players:
if p.id == state.current_player_id: