diff --git a/src/resources.rs b/src/resources.rs index 6e307f9..9b5dc4d 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -4,6 +4,7 @@ use nalgebra::Vector2; use serde::{Deserialize, Serialize}; use soukoban::{Level, Map}; +use crate::board::Board; use crate::database; use crate::solve::solver::*; use crate::utils::PushState; @@ -80,8 +81,8 @@ pub enum AutoMoveState { #[derive(Resource)] pub struct SolverState { pub solver: Mutex, - pub level: Level, pub stopwatch: Stopwatch, + pub origin_board: Board, } impl Default for SolverState { @@ -92,8 +93,10 @@ impl Default for SolverState { Strategy::default(), LowerBoundMethod::default(), )), - level: Level::from_map(Map::with_dimensions(Vector2::new(0, 0))), stopwatch: Stopwatch::new(), + origin_board: Board::with_level(Level::from_map(Map::with_dimensions(Vector2::new( + 0, 0, + )))), } } } diff --git a/src/systems/auto_solve.rs b/src/systems/auto_solve.rs index c4317b5..b986eb9 100644 --- a/src/systems/auto_solve.rs +++ b/src/systems/auto_solve.rs @@ -17,13 +17,13 @@ pub fn load_solver( let board = &board.single().board; let SolverState { solver, - level, stopwatch, + origin_board, } = &mut *solver_state; - *level = board.level.clone(); + *origin_board = board.clone(); let solver = solver.get_mut().unwrap(); *solver = Solver::new( - level.clone(), + origin_board.level.clone(), config.solver.strategy, config.solver.lower_bound_method, ); @@ -81,7 +81,7 @@ pub fn despawn_lowerbound_marks( /// Resets the board to the state before automatic solution pub fn reset_board(mut board: Query<&mut Board>, solver_state: Res) { let board = &mut board.single_mut().board; - *board = crate::board::Board::with_level(solver_state.level.clone()); + *board = solver_state.origin_board.clone(); } pub fn update_solver( @@ -94,11 +94,11 @@ pub fn update_solver( let board = &mut board.single_mut().board; let SolverState { solver, - level, stopwatch, + origin_board, } = &mut *solver_state; - *board = crate::board::Board::with_level(level.clone()); + *board = crate::board::Board::with_level(origin_board.level.clone()); let solver = solver.get_mut().unwrap(); let timeout = Duration::from_millis(50);