From fd0f6defea2223b215e56dd9a2f04cc44111801d Mon Sep 17 00:00:00 2001 From: GarandPLG Date: Mon, 16 Mar 2026 10:27:44 +0100 Subject: [PATCH] Rename GameStates to States and adjust keybindings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the old `GameStates` struct with a new `states` module, rename the field in `App` to `states`, and update construction to pass CLI args. Remove the now‑unused `game_states.rs` file and adjust imports accordingly. Update keybinding definitions: change the wildcard symbol to "[All]" and simplify the wildcard detection logic by dropping the modifiers check. --- src/app/app.rs | 24 ++----------- src/app/keybindings/keybindings.rs | 11 +++--- src/app/keybindings/main_menu.rs | 18 +++------- src/app/keybindings/settings.rs | 19 +++------- src/app/mod.rs | 6 ++-- src/app/{game_states.rs => states.rs} | 51 ++++++++++++++++++++------- src/app/views/main_menu.rs | 2 +- src/app/views/settings.rs | 28 +++++++-------- 8 files changed, 71 insertions(+), 88 deletions(-) rename src/app/{game_states.rs => states.rs} (53%) diff --git a/src/app/app.rs b/src/app/app.rs index e2ece48..7a26e67 100644 --- a/src/app/app.rs +++ b/src/app/app.rs @@ -21,17 +21,7 @@ pub enum Event { pub struct App { pub exit: bool, pub view: View, - pub game_states: GameStates, - pub username: String, - pub game_mode: GameMode, - pub map_width: u8, - pub map_height: u8, - pub perk_deck: PerkDecks, - pub starting_wood: u8, - pub starting_iron: u8, - pub supply_limit: u8, - pub xp_modifier: f32, - pub skill_points_limit: u16, + pub states: GameStates, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ValueEnum)] @@ -51,18 +41,8 @@ impl App { pub fn new(args: Cli) -> Self { Self { exit: false, - game_states: GameStates::new(), view: args.view, - username: args.username, - game_mode: args.game_mode, - map_width: args.map_width, - map_height: args.map_height, - perk_deck: args.perk_deck, - starting_wood: args.starting_wood, - starting_iron: args.starting_iron, - supply_limit: args.supply_limit, - xp_modifier: args.xp_modifier, - skill_points_limit: args.skill_points_limit, + states: GameStates::new(args), } } diff --git a/src/app/keybindings/keybindings.rs b/src/app/keybindings/keybindings.rs index 49141e4..f0b607d 100644 --- a/src/app/keybindings/keybindings.rs +++ b/src/app/keybindings/keybindings.rs @@ -112,7 +112,7 @@ pub static KEYBINDINGS: &[KeyBinding] = &[ kind: KeyEventKind::Press, modifiers: KeyModifiers::NONE, group: Group::Input, - symbol: "*", + symbol: "[All]", description: "All keyboard characters", }, ]; @@ -129,11 +129,10 @@ pub fn event_to_action(event: &KeyEvent) -> Option { return Some(b.action); } - if KEYBINDINGS.iter().any(|b| { - matches!(b.action, Action::WildCard(_)) - && b.kind == event.kind - && b.modifiers == event.modifiers - }) { + if KEYBINDINGS + .iter() + .any(|b| matches!(b.action, Action::WildCard(_)) && b.kind == event.kind) + { if let KeyCode::Char(c) = event.code { return Some(Action::WildCard(c)); } diff --git a/src/app/keybindings/main_menu.rs b/src/app/keybindings/main_menu.rs index b6f7c05..e6f0e2a 100644 --- a/src/app/keybindings/main_menu.rs +++ b/src/app/keybindings/main_menu.rs @@ -10,23 +10,15 @@ pub fn main_menu_keybindings(app: &mut App, event: &KeyEvent) { Action::Quit => app.exit = true, Action::Quit2 => app.exit = true, Action::Up => { - app.game_states.main_menu_state.selected_view = app - .game_states - .main_menu_state - .selected_view - .saturating_sub(1) - .max(1); + app.states.main_menu.selected_view = + app.states.main_menu.selected_view.saturating_sub(1).max(1); } Action::Down => { - app.game_states.main_menu_state.selected_view = app - .game_states - .main_menu_state - .selected_view - .saturating_add(1) - .min(4); + app.states.main_menu.selected_view = + app.states.main_menu.selected_view.saturating_add(1).min(4); } Action::Space => { - let selected_view: usize = app.game_states.main_menu_state.selected_view; + let selected_view: usize = app.states.main_menu.selected_view; if selected_view == 1 { app.view = View::Skirmish; diff --git a/src/app/keybindings/settings.rs b/src/app/keybindings/settings.rs index 95d266f..61bfee8 100644 --- a/src/app/keybindings/settings.rs +++ b/src/app/keybindings/settings.rs @@ -12,24 +12,15 @@ pub fn settings_keybindings(app: &mut App, key_event: &KeyEvent) { Action::Quit => app.exit = true, Action::Quit2 => app.exit = true, Action::Esc => app.view = View::MainMenu, - Action::Space => { - app.game_states.settings_state.show_popup = - !app.game_states.settings_state.show_popup - } + Action::Space => app.states.settings.show_popup = !app.states.settings.show_popup, Action::Backspace => { - if app.game_states.settings_state.show_popup { - app.game_states - .settings_state - .selected_setting_new_value - .pop(); + if app.states.settings.show_popup { + app.states.settings.selected_setting_new_value.pop(); } } Action::WildCard(c) => { - if app.game_states.settings_state.show_popup { - app.game_states - .settings_state - .selected_setting_new_value - .push(c); + if app.states.settings.show_popup { + app.states.settings.selected_setting_new_value.push(c); } } _ => (), diff --git a/src/app/mod.rs b/src/app/mod.rs index e3f6ca7..c8558b0 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1,14 +1,14 @@ pub mod app; -pub mod game_states; pub mod keybind; pub mod keybindings; +pub mod states; pub mod view; pub mod views; pub mod widgets; pub use app::{App, Event, GameMode, PerkDecks, handle_input_events}; -pub use game_states::{ +pub use keybind::handle_keybindings; +pub use states::{ GameStates, MainMenuState, PerkDecksState, SettingsState, SkillsConfigState, SkirmishState, }; -pub use keybind::handle_keybindings; pub use view::View; diff --git a/src/app/game_states.rs b/src/app/states.rs similarity index 53% rename from src/app/game_states.rs rename to src/app/states.rs index ca14f96..87580e6 100644 --- a/src/app/game_states.rs +++ b/src/app/states.rs @@ -1,10 +1,15 @@ -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +use crate::{ + app::{GameMode, PerkDecks}, + cli::Cli, +}; + +#[derive(Debug, Clone, PartialEq)] pub struct GameStates { - pub main_menu_state: MainMenuState, - pub skirmish_state: SkirmishState, - pub perk_decks_state: PerkDecksState, - pub skills_config_state: SkillsConfigState, - pub settings_state: SettingsState, + pub main_menu: MainMenuState, + pub skirmish: SkirmishState, + pub perk_decks: PerkDecksState, + pub skills_config: SkillsConfigState, + pub settings: SettingsState, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -34,43 +39,63 @@ pub struct SkillsConfigState { pub selected_skill: usize, } -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq)] pub struct SettingsState { pub id: usize, pub name: &'static str, + pub username: String, + pub game_mode: GameMode, + pub map_width: u8, + pub map_height: u8, + pub perk_deck: PerkDecks, + pub starting_wood: u8, + pub starting_iron: u8, + pub supply_limit: u8, + pub xp_modifier: f32, + pub skill_points_limit: u16, pub selected_setting: usize, pub show_popup: bool, pub selected_setting_new_value: String, } impl GameStates { - pub fn new() -> Self { + pub fn new(args: Cli) -> Self { Self { - main_menu_state: MainMenuState { + main_menu: MainMenuState { id: 0, name: "Main Menu", selected_view: 1, }, - skirmish_state: SkirmishState { + skirmish: SkirmishState { id: 1, name: "Skirmish", }, - perk_decks_state: PerkDecksState { + perk_decks: PerkDecksState { id: 2, name: "Perk Decks", selected_perk_deck: 0, }, - skills_config_state: SkillsConfigState { + skills_config: SkillsConfigState { id: 3, name: "Skills Config", selected_skill: 0, }, - settings_state: SettingsState { + settings: SettingsState { id: 4, name: "Settings", selected_setting: 0, show_popup: false, selected_setting_new_value: String::new(), + username: args.username, + game_mode: args.game_mode, + map_width: args.map_width, + map_height: args.map_height, + perk_deck: args.perk_deck, + starting_wood: args.starting_wood, + starting_iron: args.starting_iron, + supply_limit: args.supply_limit, + xp_modifier: args.xp_modifier, + skill_points_limit: args.skill_points_limit, }, } } diff --git a/src/app/views/main_menu.rs b/src/app/views/main_menu.rs index a4ecb2f..f437b50 100644 --- a/src/app/views/main_menu.rs +++ b/src/app/views/main_menu.rs @@ -65,7 +65,7 @@ pub fn main_menu_view(app: &App, area: Rect, buf: &mut Buffer) { .map(|(i, view)| { let view_string: String = format_view_string(format!("{:?}", view)); - let styled: Line<'_> = if app.game_states.main_menu_state.selected_view == i { + let styled: Line<'_> = if app.states.main_menu.selected_view == i { Line::from(format!("> {view_string}")).yellow() } else { Line::from(view_string).white() diff --git a/src/app/views/settings.rs b/src/app/views/settings.rs index a1517e3..6544c78 100644 --- a/src/app/views/settings.rs +++ b/src/app/views/settings.rs @@ -45,23 +45,19 @@ pub fn settings_view(app: &App, area: Rect, buf: &mut Buffer) { height: main_area.height / 3, }; - let popup: Paragraph<'_> = Paragraph::new( - app.game_states - .settings_state - .selected_setting_new_value - .clone(), - ) - .wrap(Wrap { trim: true }) - .style(Style::default().yellow()) - .block( - Block::new() - .title("Insert value") - .title_style(Style::default().green()) - .borders(Borders::ALL) - .border_style(Style::default().blue()), - ); + let popup: Paragraph<'_> = + Paragraph::new(app.states.settings.selected_setting_new_value.clone()) + .wrap(Wrap { trim: true }) + .style(Style::default().yellow()) + .block( + Block::new() + .title("Insert value") + .title_style(Style::default().green()) + .borders(Borders::ALL) + .border_style(Style::default().blue()), + ); - if app.game_states.settings_state.show_popup { + if app.states.settings.show_popup { popup.render(popup_area, buf); } }