use crate::rule::GameRule;
use crate::state::GameState;
use crate::state_3p::GameState3P;
#[derive(Debug, Clone)]
pub enum GameStateVariant {
FourPlayer(Box<GameState>),
ThreePlayer(Box<GameState3P>),
}
impl GameStateVariant {
pub fn new(
game_mode: u8,
skip_mjai_logging: bool,
seed: Option<u64>,
round_wind: u8,
rule: GameRule,
) -> Self {
if game_mode >= 3 {
GameStateVariant::ThreePlayer(Box::new(GameState3P::new(
game_mode,
skip_mjai_logging,
seed,
round_wind,
rule,
)))
} else {
GameStateVariant::FourPlayer(Box::new(GameState::new(
game_mode,
skip_mjai_logging,
seed,
round_wind,
rule,
)))
}
}
pub fn num_players(&self) -> u8 {
match self {
GameStateVariant::FourPlayer(s) => s.mode.num_players(),
GameStateVariant::ThreePlayer(_) => 3,
}
}
pub fn is_three_player(&self) -> bool {
matches!(self, GameStateVariant::ThreePlayer(_))
}
}