#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum GameMode {
Keys4 = 1,
Keys7 = 2,
Keys1 = 3,
Keys2 = 4,
Keys3 = 5,
Keys5 = 6,
Keys6 = 7,
Keys8 = 8,
Keys9 = 9,
Keys10 = 10,
}
impl GameMode {
pub fn to_key_count(&self, has_scratch: bool) -> i32 {
let base_count = match self {
GameMode::Keys1 => 1,
GameMode::Keys2 => 2,
GameMode::Keys3 => 3,
GameMode::Keys4 => 4,
GameMode::Keys5 => 5,
GameMode::Keys6 => 6,
GameMode::Keys7 => 7,
GameMode::Keys8 => 8,
GameMode::Keys9 => 9,
GameMode::Keys10 => 10,
};
base_count + if has_scratch { 1 } else { 0 }
}
pub fn to_short_hand(&self, has_scratch: bool) -> String {
let base = match self {
GameMode::Keys1 => "1K",
GameMode::Keys2 => "2K",
GameMode::Keys3 => "3K",
GameMode::Keys4 => "4K",
GameMode::Keys5 => "5K",
GameMode::Keys6 => "6K",
GameMode::Keys7 => "7K",
GameMode::Keys8 => "8K",
GameMode::Keys9 => "9K",
GameMode::Keys10 => "10K",
};
format!("{}{}", base, if has_scratch { "+1" } else { "" })
}
pub fn to_long_hand(&self) -> String {
match self {
GameMode::Keys1 => "1 Keys",
GameMode::Keys2 => "2 Keys",
GameMode::Keys3 => "3 Keys",
GameMode::Keys4 => "4 Keys",
GameMode::Keys5 => "5 Keys",
GameMode::Keys6 => "6 Keys",
GameMode::Keys7 => "7 Keys",
GameMode::Keys8 => "8 Keys",
GameMode::Keys9 => "9 Keys",
GameMode::Keys10 => "10 Keys",
}.to_string()
}
pub fn is_ranked(&self) -> bool {
matches!(self, GameMode::Keys4 | GameMode::Keys7)
}
pub fn is_key_mode(&self) -> bool {
true
}
pub fn from_key_count(key_count: i32) -> Result<Self, String> {
match key_count {
1 => Ok(GameMode::Keys1),
2 => Ok(GameMode::Keys2),
3 => Ok(GameMode::Keys3),
4 => Ok(GameMode::Keys4),
5 => Ok(GameMode::Keys5),
6 => Ok(GameMode::Keys6),
7 => Ok(GameMode::Keys7),
8 => Ok(GameMode::Keys8),
9 => Ok(GameMode::Keys9),
10 => Ok(GameMode::Keys10),
_ => Err(format!("Invalid key count: {}", key_count)),
}
}
}