|  |  | @ -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<u8>]) -> GameResult<Mesh> { | 
			
		
	
		
			
				
					|  |  |  |     let mut builder = MeshBuilder::new(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -60,16 +61,17 @@ fn make_grid(ctx: &mut Context, r: i32, c: i32, board: &[Vec<u8>]) -> 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<Vec<u8>> { | 
			
		
	
		
			
				
					|  |  |  |     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, | 
			
		
	
	
		
			
				
					|  |  | 
 |