use crate::bridge_engine::{self, Contract, Player}; use crate::card; use crate::card::Suit; use crate::components::{Bidding, Hand, HandProps, ShowBid}; use yew::prelude::*; pub const SUIT_DISPLAY_ORDER: [Suit; 4] = [Suit::Diamond, Suit::Club, Suit::Heart, Suit::Spade]; #[derive(Debug)] enum Phase { Bidding, Cardplay, } #[function_component(Game)] pub fn game() -> Html { let mut rng = rand::thread_rng(); let mut deal = card::deal(&mut rng); deal.sort(&SUIT_DISPLAY_ORDER, card::RankOrder::Descending); let north = use_state(|| HandProps::from_iter(deal.north.into_iter())); let west = use_state(|| HandProps::from_iter(deal.west.into_iter())); let south = use_state(|| HandProps::from_iter(deal.south.into_iter())); let east = use_state(|| HandProps::from_iter(deal.east.into_iter())); let dealer = use_state(|| Player::East); let contract: UseStateHandle> = use_state(|| None); let on_contract = { let contract = contract.clone(); Callback::from(move |c| contract.set(Some(c))) }; let phase = if contract.is_none() { Phase::Bidding } else { Phase::Cardplay }; let shuffle = { let north = north.clone(); let west = west.clone(); let south = south.clone(); let east = east.clone(); let dealer = dealer.clone(); let contract = contract.clone(); Callback::from(move |_| { let mut rng = rand::thread_rng(); let mut deal = card::deal(&mut rng); deal.sort(&SUIT_DISPLAY_ORDER, card::RankOrder::Descending); north.set(deal.north.into_iter().collect()); west.set(deal.west.into_iter().collect()); south.set(deal.south.into_iter().collect()); east.set(deal.east.into_iter().collect()); dealer.set(dealer.next()); contract.set(None); }) }; html! { <>

{ format!("Dealer: {:?}", *dealer) }

if let Some(_) = &*contract { { "Let's play" } } else { }
} }