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) 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
ScoreboardScreen( self.set_timer(
scores=scores, 3.0,
title=f"Hole {round_num} Complete", lambda: self.app.push_screen(
is_game_over=False, ScoreboardScreen(
is_host=self._is_host, scores=scores,
round_num=round_num, title=f"Hole {round_num} Complete",
total_rounds=total_rounds, is_game_over=False,
finisher_id=finisher_id, 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: 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: