diff --git a/src/app/keybindings/skirmish.rs b/src/app/keybindings/skirmish.rs index 9628ec7..8ca4ca9 100644 --- a/src/app/keybindings/skirmish.rs +++ b/src/app/keybindings/skirmish.rs @@ -9,35 +9,47 @@ pub fn skirmish_keybindings(app: &mut App, key_event: &KeyEvent) { if let Some(action) = event_to_action(&key_event) { common_keybindings(app, action); match action { - Action::Up => { - app.states.skirmish.focused_cell.move_up(); - - // if app.states.skirmish.horizontal_offset.get_value() { - - // } - } + Action::Up => app.states.skirmish.focused_cell.move_up(), Action::Down => app.states.skirmish.focused_cell.move_down(), Action::Left => app.states.skirmish.focused_cell.move_left(), Action::Right => app.states.skirmish.focused_cell.move_right(), - Action::ScrollUp => app.states.skirmish.vertical_offset.prev(), - Action::ScrollDown => app.states.skirmish.vertical_offset.next(), - Action::ScrollLeft => app.states.skirmish.horizontal_offset.prev(), - Action::ScrollRight => app.states.skirmish.horizontal_offset.next(), + Action::ScrollUp => { + app.states.skirmish.vertical_offset.prev(); + app.states.skirmish.focused_cell.move_up(); + } + Action::ScrollDown => { + app.states.skirmish.vertical_offset.next(); + app.states.skirmish.focused_cell.move_down(); + } + Action::ScrollLeft => { + app.states.skirmish.horizontal_offset.prev(); + app.states.skirmish.focused_cell.move_left(); + } + Action::ScrollRight => { + app.states.skirmish.horizontal_offset.next(); + app.states.skirmish.focused_cell.move_right(); + } Action::ZoomIn => match app.states.skirmish.zoom_level { ZoomLevel::ZoomedIn => {} ZoomLevel::Default => { app.states.skirmish.zoom_level = ZoomLevel::ZoomedIn; + app.states.skirmish.vertical_offset.next(); } ZoomLevel::ZoomedOut => { app.states.skirmish.zoom_level = ZoomLevel::Default; + app.states.skirmish.vertical_offset.next(); + app.states.skirmish.vertical_offset.next(); } }, Action::ZoomOut => match app.states.skirmish.zoom_level { ZoomLevel::ZoomedIn => { app.states.skirmish.zoom_level = ZoomLevel::Default; + app.states.skirmish.vertical_offset.prev(); } ZoomLevel::Default => { app.states.skirmish.zoom_level = ZoomLevel::ZoomedOut; + app.states.skirmish.vertical_offset.prev(); + app.states.skirmish.vertical_offset.prev(); } ZoomLevel::ZoomedOut => {} }, diff --git a/src/app/state.rs b/src/app/state.rs index 64ecbc6..0939d32 100644 --- a/src/app/state.rs +++ b/src/app/state.rs @@ -32,7 +32,12 @@ impl GameStates { map_height: args.map_height as usize, board_cells: Vec::new(), zoom_level: args.zoom_level, - focused_cell: FocusedCell::new(0, 0), + focused_cell: FocusedCell::new( + (args.map_height / 2) as usize - 1, + 2, + args.map_height as usize, + args.map_width as usize, + ), }, perk_decks: PerkDecksState { id: 2, diff --git a/src/app/states/skirmish.rs b/src/app/states/skirmish.rs index 5a47d13..7cfb46d 100644 --- a/src/app/states/skirmish.rs +++ b/src/app/states/skirmish.rs @@ -54,27 +54,34 @@ impl Offset { pub struct FocusedCell { pub row: usize, pub col: usize, + pub max_row: usize, + pub max_col: usize, } impl FocusedCell { - pub fn new(row: usize, col: usize) -> Self { - Self { row, col } + pub fn new(row: usize, col: usize, max_row: usize, max_col: usize) -> Self { + Self { + row, + col, + max_row, + max_col, + } } pub fn move_up(&mut self) { - self.row = self.row.saturating_sub(1); + self.row = self.row.saturating_sub(1).max(0); } pub fn move_down(&mut self) { - self.row = self.row.saturating_add(1); + self.row = self.row.saturating_add(1).min(self.max_row - 1); } pub fn move_left(&mut self) { - self.col = self.col.saturating_sub(1); + self.col = self.col.saturating_sub(1).max(0); } pub fn move_right(&mut self) { - self.col = self.col.saturating_add(1); + self.col = self.col.saturating_add(1).min(self.max_col - 1); } } diff --git a/src/app/widgets/cell.rs b/src/app/widgets/cell.rs index e462e81..c0de3b4 100644 --- a/src/app/widgets/cell.rs +++ b/src/app/widgets/cell.rs @@ -2,7 +2,7 @@ use ratatui::{ buffer::Buffer, layout::{Alignment, Rect}, style::{Color, Style, Stylize}, - widgets::{Block, Borders, Paragraph, Widget}, + widgets::{Block, Borders, Padding, Paragraph, Widget}, }; // pub enum CellTags { @@ -59,7 +59,13 @@ impl Widget for CellWidget { Block::default() .borders(Borders::ALL) .style(Style::default().fg(self.is_selected())) - .title(self.display_coords().green()), + .title(self.display_coords().green()) + .padding(Padding { + left: 0, + right: 0, + top: if area.height <= 3 { 0 } else { area.height / 3 }, + bottom: 0, + }), ) .render(area, buf); }