add digit tool

This commit is contained in:
Crispy 2024-10-05 20:22:18 +02:00
parent 465b5c40d1
commit fc6c66ff31
5 changed files with 130 additions and 65 deletions

View file

@ -89,7 +89,7 @@ impl Machine {
// reset wires
for y in 0..self.board.height() {
for x in 0..self.board.width() {
if let Tile::Powerable(_, state) = self.board.get_mut((x, y).into()) {
if let Tile::Powerable(_, state) = self.board.get_mut_unchecked((x, y).into()) {
*state = false;
}
}
@ -106,7 +106,7 @@ impl Machine {
continue;
}
let mut new_tile = None;
let target = self.board.get_mut(next_pos);
let target = self.board.get_mut_unchecked(next_pos);
match target {
Tile::Blank => {
*target = tile;
@ -175,7 +175,7 @@ impl Machine {
Tile::Mirror(mirror) => {
let new_dir = mirror.new_dir(dir);
let far_pos = new_dir.step(next_pos);
let far_target = self.board.get_mut(far_pos);
let far_target = self.board.get_mut_unchecked(far_pos);
if let Tile::Blank = far_target {
*far_target = Tile::Marble {
value,
@ -189,7 +189,7 @@ impl Machine {
}
if let Some(t) = new_tile {
*self.board.get_mut(marble_pos) = t;
*self.board.get_mut_unchecked(marble_pos) = t;
}
}
}
@ -209,7 +209,7 @@ impl Machine {
if !self.board.in_bounds(pos) {
return;
}
let tile = self.board.get_mut(pos);
let tile = self.board.get_mut_unchecked(pos);
let front_pos = dir.step(pos);
if let Tile::Powerable(tile, state) = tile {
if let PTile::Trigger = tile {
@ -234,7 +234,7 @@ impl Machine {
}
PTile::Bag => {
if let Some(Tile::Blank) = self.board.get(front_pos) {
*self.board.get_mut(front_pos) = Tile::Marble { value: 0, dir };
*self.board.get_mut_unchecked(front_pos) = Tile::Marble { value: 0, dir };
self.marbles.push(front_pos);
}
}
@ -243,7 +243,7 @@ impl Machine {
&& self.board.get_or_blank(front_pos).is_blank()
{
let value = self.input[self.input_index] as MarbleValue;
*self.board.get_mut(front_pos) = Tile::Marble { value, dir };
*self.board.get_mut_unchecked(front_pos) = Tile::Marble { value, dir };
self.marbles.push(front_pos);
self.input_index += 1;
}
@ -266,12 +266,12 @@ impl Machine {
MathOp::Rem => val_a.checked_rem(val_b).unwrap_or_default(),
};
// println!("{op:?} a:{val_a} b:{val_b}");
*self.board.get_mut(front_pos) = Tile::Marble { value: result, dir };
*self.board.get_mut_unchecked(front_pos) = Tile::Marble { value: result, dir };
self.marbles.push(front_pos);
}
}
PTile::Flipper => {
let m = self.board.get_mut(front_pos);
let m = self.board.get_mut_unchecked(front_pos);
match m {
Tile::Powerable(PTile::Wire(wire_type), _) => {
*wire_type = match *wire_type {