use super::*;
use rbp_cards::*;
#[derive(Debug, Clone)]
pub struct Perfect {
root: Game,
actions: Vec<Action>,
}
impl From<(&Partial, Hole)> for Perfect {
fn from((partial, hole): (&Partial, Hole)) -> Self {
debug_assert!(partial.base().n() == 2);
let preblind = partial.base().assume(partial.turn(), hole);
let root = Game::blinds()
.into_iter()
.fold(preblind, |mut g, a| g.consume(a));
Self {
root,
actions: partial.actions().to_vec(),
}
}
}
impl Recall for Perfect {
fn root(&self) -> Game {
self.root
}
fn actions(&self) -> &[Action] {
&self.actions
}
}
#[allow(dead_code)]
impl Perfect {
fn erase(&self, hero: Turn) -> Partial {
let hole = self.root.seats()[hero.position()].cards();
let board = Hand::from(self.root.board());
let observation = Observation::from((Hand::from(hole), board));
let actions = self
.actions
.iter()
.filter(|a| a.is_choice())
.cloned()
.collect();
Partial::from((hero, observation, actions))
}
}