From f5cf81571c552f3e477c59a809a95f226296ac90 Mon Sep 17 00:00:00 2001 From: e-dt Date: Fri, 31 Dec 2021 14:00:07 +1100 Subject: [PATCH] Small, small, refactoring + added comments --- src/main.rs | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main.rs b/src/main.rs index c2c7737..7ee967f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,7 +30,7 @@ enum ActorPosn { x: u8, y: u8, }, - Floating { + Floating { //This probably needs some `previous position on board' fields x: f32, y: f32, held_x: f32, @@ -47,6 +47,7 @@ struct Actor { behaviour: u8, //index into the behaviours array } + fn make_grid(ctx: &mut Context, r: i32, c: i32, board: &[Vec]) -> GameResult { let mut builder = MeshBuilder::new(); @@ -60,16 +61,17 @@ fn make_grid(ctx: &mut Context, r: i32, c: i32, board: &[Vec]) -> GameResult w: BOARD_SQUARE_SIZE, h: BOARD_SQUARE_SIZE, }, - match board[row as usize][col as usize] { + match board[row as usize][col as usize] % 2 { 0 => Color::WHITE, 1 => Color::BLACK, - 2 => Color::RED, + _ => Color::BLACK //impossible +/* 2 => Color::RED, 3 => Color::CYAN, 4 => Color::YELLOW, 5 => Color::GREEN, 6 => Color::BLUE, 7 => Color::MAGENTA, - _ => Color::BLACK, + _ => Color::BLACK,*/ }, )?; } @@ -88,6 +90,13 @@ fn make_board(r: i32, c: i32) -> Vec> { init } +//I have moved this function out of the impl block for borrow checking reasons. +//This should really only borrow self.col and self.row, but as a method it borrows everything. +//As a result, I couldn't use this while iterating through actors. +//Possible solution: Wrap `col' and `row' up as some kind of Dimensions struct, then make this a method on that struct. +//Would then only borrow the dimensions. +//http://smallcultfollowing.com/babysteps/blog/2018/11/01/after-nll-interprocedural-conflicts/ + fn closest_square_coords(x: f32, y: f32, col: i32, row: i32) -> (u8, u8) { //First, normalise to within the grid. let mut x = x; @@ -131,10 +140,9 @@ impl Apr { }) } - fn set_colour(&mut self, r: usize, c: usize, col: u8) -> GameResult<()> { - self.board[r][c] = col; - self.should_update_grid = true; - Ok(()) + fn set_colour(&mut self, r: usize, c: usize, col: u8) { //You should only modify self.board through this method. + self.board[r][c] = col; //Making a getter for self.board would sadly break borrowing in the same way that closest_square_coords does. + self.should_update_grid = true; //Similar solutions apply. } } impl EventHandler for Apr { @@ -193,12 +201,7 @@ impl EventHandler for Apr { graphics::draw(ctx, &self.grid, drawparams)?; for actor in &self.actors { match actor.posn { - Floating { - x, - y, - held_x: _, - held_y: _, - } => graphics::draw(ctx, &actor.image, drawparams.dest([x, y]))?, + Floating { x, y, .. } => graphics::draw(ctx, &actor.image, drawparams.dest([x, y]))?, Board { x, y } => graphics::draw( ctx, &actor.image,