diff --git a/src/app/app.rs b/src/app/app.rs index 0ab27b0..9e94bd3 100644 --- a/src/app/app.rs +++ b/src/app/app.rs @@ -2,7 +2,6 @@ use crate::{ app::{GameStates, handle_keybindings, view::View}, cli::Cli, }; -use clap::ValueEnum; use ratatui::{ DefaultTerminal, Frame, crossterm::event::{self, KeyEvent}, @@ -24,19 +23,6 @@ pub struct App { pub states: GameStates, } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ValueEnum)] -pub enum GameMode { - LastManStanding, - FrontLines, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ValueEnum)] -pub enum PerkDecks { - Silesian, - BogeyMan, - Anteater, -} - impl App { pub fn new(args: Cli) -> Self { Self { diff --git a/src/app/keybindings/settings.rs b/src/app/keybindings/settings.rs index 3c98b23..360656d 100644 --- a/src/app/keybindings/settings.rs +++ b/src/app/keybindings/settings.rs @@ -29,6 +29,7 @@ pub fn settings_keybindings(app: &mut App, key_event: &KeyEvent) { Action::Space => app.states.settings.show_popup = !app.states.settings.show_popup, Action::Enter => { // FIXME: No feedback + // FIXME: Extract match block into a function if app.states.settings.show_popup { let option = &app.states.settings.options[app.states.settings.selected_setting].value; diff --git a/src/app/mod.rs b/src/app/mod.rs index c8558b0..1f32052 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1,14 +1,13 @@ pub mod app; pub mod keybind; pub mod keybindings; +pub mod state; pub mod states; pub mod view; pub mod views; pub mod widgets; -pub use app::{App, Event, GameMode, PerkDecks, handle_input_events}; +pub use app::{App, Event, handle_input_events}; pub use keybind::handle_keybindings; -pub use states::{ - GameStates, MainMenuState, PerkDecksState, SettingsState, SkillsConfigState, SkirmishState, -}; +pub use state::GameStates; pub use view::View; diff --git a/src/app/states.rs b/src/app/state.rs similarity index 56% rename from src/app/states.rs rename to src/app/state.rs index e97dd14..fa912e6 100644 --- a/src/app/states.rs +++ b/src/app/state.rs @@ -1,7 +1,8 @@ -use std::fmt::Display; - use crate::{ - app::{GameMode, PerkDecks}, + app::states::{ + MainMenuState, PerkDecksState, SettingsOption, SettingsState, SettingsValue, + SkillsConfigState, SkirmishState, + }, cli::Cli, }; @@ -14,92 +15,6 @@ pub struct GameStates { pub settings: SettingsState, } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct MainMenuState { - pub id: usize, - pub name: &'static str, - pub selected_view: usize, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct SkirmishState { - pub id: usize, - pub name: &'static str, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct PerkDecksState { - pub id: usize, - pub name: &'static str, - pub selected_perk_deck: usize, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct SkillsConfigState { - pub id: usize, - pub name: &'static str, - pub selected_skill: usize, -} - -#[derive(Debug, Clone, PartialEq)] -pub struct SettingsState { - pub id: usize, - pub name: &'static str, - pub selected_setting: usize, - pub show_popup: bool, - pub selected_setting_new_value: String, - pub error_message: String, - pub options: Vec, -} - -#[derive(Debug, Clone, PartialEq)] -pub enum SettingsValue { - U8(u8), - F32(f32), - U16(u16), - Text(String), - GameMode(GameMode), - PerkDeck(PerkDecks), -} - -#[derive(Debug, Clone, PartialEq)] -pub struct SettingsOption { - pub name: &'static str, - pub value: SettingsValue, -} - -impl Display for SettingsValue { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - SettingsValue::U8(v) => write!(f, "{}", v), - SettingsValue::F32(v) => write!(f, "{}", v), - SettingsValue::U16(v) => write!(f, "{}", v), - SettingsValue::Text(v) => write!(f, "{}", v), - SettingsValue::GameMode(v) => write!(f, "{}", v), - SettingsValue::PerkDeck(v) => write!(f, "{}", v), - } - } -} - -impl Display for GameMode { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - GameMode::FrontLines => write!(f, "Front Lines"), - GameMode::LastManStanding => write!(f, "Last Man Standing"), - } - } -} - -impl Display for PerkDecks { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - PerkDecks::Silesian => write!(f, "Silesian"), - PerkDecks::BogeyMan => write!(f, "Bogey Man"), - PerkDecks::Anteater => write!(f, "Anteater"), - } - } -} - impl GameStates { pub fn new(args: Cli) -> Self { Self { diff --git a/src/app/states/main_menu.rs b/src/app/states/main_menu.rs new file mode 100644 index 0000000..d603b59 --- /dev/null +++ b/src/app/states/main_menu.rs @@ -0,0 +1,6 @@ +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct MainMenuState { + pub id: usize, + pub name: &'static str, + pub selected_view: usize, +} diff --git a/src/app/states/mod.rs b/src/app/states/mod.rs new file mode 100644 index 0000000..199dc12 --- /dev/null +++ b/src/app/states/mod.rs @@ -0,0 +1,11 @@ +pub mod main_menu; +pub mod perk_decks; +pub mod settings; +pub mod skills_config; +pub mod skirmish; + +pub use main_menu::MainMenuState; +pub use perk_decks::{PerkDecks, PerkDecksState}; +pub use settings::{GameMode, SettingsOption, SettingsState, SettingsValue}; +pub use skills_config::SkillsConfigState; +pub use skirmish::SkirmishState; diff --git a/src/app/states/perk_decks.rs b/src/app/states/perk_decks.rs new file mode 100644 index 0000000..a9d4bb8 --- /dev/null +++ b/src/app/states/perk_decks.rs @@ -0,0 +1,26 @@ +use clap::ValueEnum; +use std::fmt::Display; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct PerkDecksState { + pub id: usize, + pub name: &'static str, + pub selected_perk_deck: usize, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ValueEnum)] +pub enum PerkDecks { + Silesian, + BogeyMan, + Anteater, +} + +impl Display for PerkDecks { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + PerkDecks::Silesian => write!(f, "Silesian"), + PerkDecks::BogeyMan => write!(f, "Bogey Man"), + PerkDecks::Anteater => write!(f, "Anteater"), + } + } +} diff --git a/src/app/states/settings.rs b/src/app/states/settings.rs new file mode 100644 index 0000000..abd18de --- /dev/null +++ b/src/app/states/settings.rs @@ -0,0 +1,58 @@ +use crate::app::states::PerkDecks; +use clap::ValueEnum; +use std::fmt::Display; + +#[derive(Debug, Clone, PartialEq)] +pub struct SettingsState { + pub id: usize, + pub name: &'static str, + pub selected_setting: usize, + pub show_popup: bool, + pub selected_setting_new_value: String, + pub error_message: String, + pub options: Vec, +} + +#[derive(Debug, Clone, PartialEq)] +pub struct SettingsOption { + pub name: &'static str, + pub value: SettingsValue, +} + +#[derive(Debug, Clone, PartialEq)] +pub enum SettingsValue { + U8(u8), + F32(f32), + U16(u16), + Text(String), + GameMode(GameMode), + PerkDeck(PerkDecks), +} + +impl Display for SettingsValue { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SettingsValue::U8(v) => write!(f, "{}", v), + SettingsValue::F32(v) => write!(f, "{}", v), + SettingsValue::U16(v) => write!(f, "{}", v), + SettingsValue::Text(v) => write!(f, "{}", v), + SettingsValue::GameMode(v) => write!(f, "{}", v), + SettingsValue::PerkDeck(v) => write!(f, "{}", v), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ValueEnum)] +pub enum GameMode { + LastManStanding, + FrontLines, +} + +impl Display for GameMode { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + GameMode::FrontLines => write!(f, "Front Lines"), + GameMode::LastManStanding => write!(f, "Last Man Standing"), + } + } +} diff --git a/src/app/states/skills_config.rs b/src/app/states/skills_config.rs new file mode 100644 index 0000000..7af21bf --- /dev/null +++ b/src/app/states/skills_config.rs @@ -0,0 +1,6 @@ +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct SkillsConfigState { + pub id: usize, + pub name: &'static str, + pub selected_skill: usize, +} diff --git a/src/app/states/skirmish.rs b/src/app/states/skirmish.rs new file mode 100644 index 0000000..0ddbffa --- /dev/null +++ b/src/app/states/skirmish.rs @@ -0,0 +1,5 @@ +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct SkirmishState { + pub id: usize, + pub name: &'static str, +} diff --git a/src/cli.rs b/src/cli.rs index 90ad819..f96653e 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,4 +1,7 @@ -use crate::app::{GameMode, PerkDecks, view::View}; +use crate::app::{ + states::{GameMode, PerkDecks}, + view::View, +}; use clap::Parser; #[derive(Parser, Debug)]