summaryrefslogtreecommitdiff
path: root/protocol
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-12-22 20:35:49 -0500
committerKjetil Orbekk <kj@orbekk.com>2022-12-22 20:36:35 -0500
commit573749cb2055d9e3e6897f73d6879773d738faee (patch)
tree84238c93441bdef3e097b82ce37348d8c7c766ee /protocol
parent93faa3894907508933a43173d829b15fd32cbc44 (diff)
Add playing view showing declarer and dummy hands
Diffstat (limited to 'protocol')
-rw-r--r--protocol/src/bridge_engine.rs19
-rw-r--r--protocol/src/simple_bots.rs6
2 files changed, 24 insertions, 1 deletions
diff --git a/protocol/src/bridge_engine.rs b/protocol/src/bridge_engine.rs
index bfc2a93..293b205 100644
--- a/protocol/src/bridge_engine.rs
+++ b/protocol/src/bridge_engine.rs
@@ -187,6 +187,11 @@ impl DealInPlay {
self.in_progress.current_player()
}
+ pub fn is_dummy_visible(&self) -> bool {
+ !self.tricks_played.is_empty()
+ || !self.in_progress.trick.cards_played.is_empty()
+ }
+
pub fn play(
mut self: Self,
card: Card,
@@ -835,11 +840,23 @@ impl PlayStatePlayerView {
play_state: &PlayState,
player_position: Player,
) -> Self {
+ let dummy = if play_state.playing_deal.is_dummy_visible() {
+ Some(
+ play_state
+ .contract
+ .declarer
+ .many_next(2)
+ .get_cards(&play_state.playing_deal.deal)
+ .clone(),
+ )
+ } else {
+ None
+ };
Self {
player_position,
bidding: play_state.bidding.clone(),
contract: play_state.contract,
- dummy: None,
+ dummy,
declarer_tricks: 0,
hand: player_position
.get_cards(&play_state.playing_deal.deal)
diff --git a/protocol/src/simple_bots.rs b/protocol/src/simple_bots.rs
index 501f1f4..8965254 100644
--- a/protocol/src/simple_bots.rs
+++ b/protocol/src/simple_bots.rs
@@ -67,6 +67,9 @@ mod tests {
let south_state =
PlayStatePlayerView::from_play_state(&play_state, Player::South);
+ assert!(!play_state.playing_deal.is_dummy_visible());
+ assert!(south_state.dummy.is_none());
+
let card1 = (RandomPlayingBot {}).play(&south_state).await;
info!("South state: {south_state:#?}");
@@ -79,6 +82,9 @@ mod tests {
let west_state =
PlayStatePlayerView::from_play_state(&play_state, Player::West);
+ assert!(play_state.playing_deal.is_dummy_visible());
+ assert!(west_state.dummy.is_some());
+
let card2 = (RandomPlayingBot {}).play(&west_state).await;
info!("West state: {west_state:#?}");