diff --git a/assets/tiles/io_tile_off.png b/assets/tiles/io_tile_off.png index afe0ffd..88872bd 100644 Binary files a/assets/tiles/io_tile_off.png and b/assets/tiles/io_tile_off.png differ diff --git a/assets/tiles/io_tile_on.png b/assets/tiles/io_tile_on.png index b543a9f..0ad849b 100644 Binary files a/assets/tiles/io_tile_on.png and b/assets/tiles/io_tile_on.png differ diff --git a/src/editor.rs b/src/editor.rs index e1877b3..8fbbd59 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -444,23 +444,20 @@ impl Editor { } pub fn draw(&mut self, d: &mut RaylibDrawHandle, textures: &Textures) { - d.clear_background(gray(48)); + d.clear_background(BG_WORLD); - if self.draw_overlay && self.zoom >= 1. { - let tile_size = (TILE_TEXTURE_SIZE * self.zoom) as f32; + if self.draw_overlay && self.zoom >= 0.5 { + let tile_size = TILE_TEXTURE_SIZE * self.zoom; let grid_spill_x = (self.view_offset.x).rem(tile_size) - tile_size; let grid_spill_y = (self.view_offset.y).rem(tile_size) - tile_size; - d.gui_grid( - Rectangle::new( - grid_spill_x, - grid_spill_y, - d.get_screen_width() as f32 * 2., - d.get_screen_height() as f32 * 2., - ), - None, - tile_size, - 1, - ); + for y in 0..=(d.get_screen_height() / tile_size as i32) { + let y = y * tile_size as i32 + grid_spill_y as i32; + d.draw_line(0, y, d.get_screen_width(), y, FG_GRID); + } + for x in 0..=(d.get_screen_width() / tile_size as i32) { + let x = x * tile_size as i32 + grid_spill_x as i32; + d.draw_line(x, 0, x, d.get_screen_height(), FG_GRID); + } } self.draw_board(d, textures); diff --git a/src/marble_engine.rs b/src/marble_engine.rs index f99ddd2..422301e 100644 --- a/src/marble_engine.rs +++ b/src/marble_engine.rs @@ -179,25 +179,6 @@ impl Machine { }; } - for &(pos, _val, _dir) in &new_marbles { - let Some(Tile::Open(OpenTile::Blank, claim)) = self.board.get_mut(pos) else { - unreachable!() - }; - *claim = match claim { - Claim::Free => Claim::Claimed, - Claim::Claimed | Claim::Blocked => Claim::Blocked, - _ => unreachable!(), - } - } - // new marbles are past old_marbles index, so will not move this step - for (pos, value, dir) in new_marbles { - let Some(Tile::Open(OpenTile::Blank, Claim::Claimed)) = self.board.get_mut(pos) else { - continue; - }; - self.board.set(pos, Tile::Marble { value, dir }); - self.marbles.push(pos); - } - // old wires have to be reset after machine processing, // so they can figure out which directions they are powered from for &p in &self.powered { @@ -220,7 +201,7 @@ impl Machine { Multiple, } - // find all direct bounces + // #### find all direct bounces #### let mut will_reverse_direction = vec![false; self.marbles.len()]; // todo store in tile to remove search through self.marbles let mut influenced_direction = vec![DirInfluence::None; self.marbles.len()]; @@ -261,7 +242,7 @@ impl Machine { _ => (), } } - // apply all direct bounces + // #### apply all direct bounces #### for (i, &pos) in self.marbles.iter().enumerate() { let Some(Tile::Marble { value: _, dir }) = self.board.get_mut(pos) else { unreachable!() @@ -273,6 +254,29 @@ impl Machine { } } + // #### new marbles #### + // prepare creating the new marbles + for &(pos, _val, _dir) in &new_marbles { + let Some(Tile::Open(OpenTile::Blank, claim)) = self.board.get_mut(pos) else { + unreachable!() + }; + *claim = match claim { + Claim::Free => Claim::Claimed, + Claim::Claimed | Claim::Blocked => Claim::Blocked, + _ => unreachable!(), + } + } + // create new marbles + // new marbles are past old_marbles index, so will not move this step + for (pos, value, dir) in new_marbles { + let Some(Tile::Open(OpenTile::Blank, Claim::Claimed)) = self.board.get_mut(pos) else { + continue; + }; + self.board.set(pos, Tile::Marble { value, dir }); + self.marbles.push(pos); + } + + // #### movement #### let mut claim_positions = Vec::new(); // mark claims to figure out what spaces can be moved to for &pos in &self.marbles[..old_marbles] { diff --git a/src/theme.rs b/src/theme.rs index 6d9cdc8..fd2875c 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -1,5 +1,8 @@ use raylib::prelude::*; +pub const BG_WORLD: Color = gray(48); +pub const FG_GRID: Color = gray(64); + pub const BG_DARK: Color = gray(32); pub const BG_MEDIUM: Color = gray(48); pub const BG_LIGHT: Color = gray(64);