generated from GarandPLG/rust-flake-template
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:
@@ -83,15 +83,7 @@ pub fn skirmish_keybindings(app: &mut App, key_event: &KeyEvent) {
|
||||
}
|
||||
ZoomLevel::ZoomedOut => {}
|
||||
},
|
||||
Action::Space => {
|
||||
if board.marking_cells {
|
||||
board.marking_cells = false;
|
||||
board.clear_marked_cells();
|
||||
} else {
|
||||
board.marking_cells = true;
|
||||
board.start_marking_cells();
|
||||
}
|
||||
}
|
||||
Action::Space => board.toggle_marking(),
|
||||
Action::Backspace => {
|
||||
board.marking_cells = false;
|
||||
board.clear_marked_cells()
|
||||
|
||||
@@ -106,22 +106,25 @@ impl BoardState {
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn get_last_marked_cell(&self) -> Option<(usize, usize)> {
|
||||
self.marked_cells.last().cloned()
|
||||
pub fn toggle_marking(&mut self) {
|
||||
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) {
|
||||
let last_cell: Option<(usize, usize)> = self.get_last_marked_cell();
|
||||
let cell: &mut CellWidget = self.get_mut_cell(row, col);
|
||||
pub fn set_marked_cell(&mut self, new_cell: (usize, usize), old_cell: (usize, usize)) {
|
||||
let cell: &mut CellWidget = self.get_mut_cell(new_cell.0, new_cell.1);
|
||||
|
||||
if cell.get_marked() {
|
||||
if last_cell == Some((old_row, old_col)) {
|
||||
self.get_mut_cell(old_row, old_col).set_marked(false);
|
||||
self.marked_cells.pop();
|
||||
}
|
||||
if cell.get_marked() && old_cell != new_cell {
|
||||
self.get_mut_cell(old_cell.0, old_cell.1).set_marked(false);
|
||||
self.marked_cells.pop();
|
||||
} else {
|
||||
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) {
|
||||
let old_row: usize = self.focused_cell.get_row();
|
||||
let old_col: usize = self.focused_cell.get_col();
|
||||
let (new_row, new_col) = self.focused_cell.move_focused_cell(direction);
|
||||
let old_cell: (usize, usize) = (self.focused_cell.get_row(), self.focused_cell.get_col());
|
||||
let new_cell: (usize, usize) = self.focused_cell.move_focused_cell(direction);
|
||||
|
||||
self.get_mut_cell(old_row, old_col).set_selected(false);
|
||||
self.get_mut_cell(new_row, new_col).set_selected(true);
|
||||
self.get_mut_cell(old_cell.0, old_cell.1)
|
||||
.set_selected(false);
|
||||
self.get_mut_cell(new_cell.0, new_cell.1).set_selected(true);
|
||||
|
||||
if self.marking_cells {
|
||||
self.set_marked_cell(new_row, new_col, old_row, old_col);
|
||||
self.set_marked_cell(new_cell, old_cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ impl CellWidget {
|
||||
}
|
||||
|
||||
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()
|
||||
} else {
|
||||
"".to_span()
|
||||
|
||||
Reference in New Issue
Block a user