Add toggle_marking and simplify marking logic

Introduce a public `BoardState::toggle_marking` that flips the
marking mode and starts or clears marking accordingly. Refactor
`set_marked_cell` to accept tuple coordinates and clean up its
logic. Update `change_focused_cell` to work with the new signature
and use the toggle helper. Adjust cell display to show coordinates
when a cell is marked.
This commit is contained in:
2026-04-10 21:30:48 +02:00
parent 869ba0bb7f
commit d5f4d03264
3 changed files with 22 additions and 27 deletions
+1 -9
View File
@@ -83,15 +83,7 @@ pub fn skirmish_keybindings(app: &mut App, key_event: &KeyEvent) {
} }
ZoomLevel::ZoomedOut => {} ZoomLevel::ZoomedOut => {}
}, },
Action::Space => { Action::Space => board.toggle_marking(),
if board.marking_cells {
board.marking_cells = false;
board.clear_marked_cells();
} else {
board.marking_cells = true;
board.start_marking_cells();
}
}
Action::Backspace => { Action::Backspace => {
board.marking_cells = false; board.marking_cells = false;
board.clear_marked_cells() board.clear_marked_cells()
+20 -17
View File
@@ -106,22 +106,25 @@ impl BoardState {
.collect() .collect()
} }
fn get_last_marked_cell(&self) -> Option<(usize, usize)> { pub fn toggle_marking(&mut self) {
self.marked_cells.last().cloned() self.marking_cells = !self.marking_cells;
if self.marking_cells {
self.start_marking_cells();
} else {
self.clear_marked_cells();
}
} }
pub fn set_marked_cell(&mut self, row: usize, col: usize, old_row: usize, old_col: usize) { pub fn set_marked_cell(&mut self, new_cell: (usize, usize), old_cell: (usize, usize)) {
let last_cell: Option<(usize, usize)> = self.get_last_marked_cell(); let cell: &mut CellWidget = self.get_mut_cell(new_cell.0, new_cell.1);
let cell: &mut CellWidget = self.get_mut_cell(row, col);
if cell.get_marked() { if cell.get_marked() && old_cell != new_cell {
if last_cell == Some((old_row, old_col)) { self.get_mut_cell(old_cell.0, old_cell.1).set_marked(false);
self.get_mut_cell(old_row, old_col).set_marked(false); self.marked_cells.pop();
self.marked_cells.pop();
}
} else { } else {
cell.set_marked(true); cell.set_marked(true);
self.marked_cells.push((row, col)); self.marked_cells.push((new_cell.0, new_cell.1));
} }
} }
@@ -215,15 +218,15 @@ impl BoardState {
} }
pub fn change_focused_cell(&mut self, direction: MoveFocusedCell) { pub fn change_focused_cell(&mut self, direction: MoveFocusedCell) {
let old_row: usize = self.focused_cell.get_row(); let old_cell: (usize, usize) = (self.focused_cell.get_row(), self.focused_cell.get_col());
let old_col: usize = self.focused_cell.get_col(); let new_cell: (usize, usize) = self.focused_cell.move_focused_cell(direction);
let (new_row, new_col) = self.focused_cell.move_focused_cell(direction);
self.get_mut_cell(old_row, old_col).set_selected(false); self.get_mut_cell(old_cell.0, old_cell.1)
self.get_mut_cell(new_row, new_col).set_selected(true); .set_selected(false);
self.get_mut_cell(new_cell.0, new_cell.1).set_selected(true);
if self.marking_cells { if self.marking_cells {
self.set_marked_cell(new_row, new_col, old_row, old_col); self.set_marked_cell(new_cell, old_cell);
} }
} }
} }
+1 -1
View File
@@ -81,7 +81,7 @@ impl CellWidget {
} }
fn display_coords(&self) -> Span<'_> { fn display_coords(&self) -> Span<'_> {
if self.selected || self.tag != CellTag::Stone { if self.selected || self.tag != CellTag::Stone || self.marked {
format!("{}{}", self.col_to_letters(), self.row).green() format!("{}{}", self.col_to_letters(), self.row).green()
} else { } else {
"".to_span() "".to_span()