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:
parent
dfb3397dcb
commit
72eab2c811
@ -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:
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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}]╰[/]"
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user