add sprites for most tiles

This commit is contained in:
Crispy 2024-10-04 01:21:52 +02:00
parent 12bd19a7f3
commit d4f9be5bff
41 changed files with 108 additions and 63 deletions

View file

@ -1,4 +1,6 @@
use raylib::{drawing::RaylibDrawHandle, math::Vector2};
use std::collections::HashMap;
use raylib::{drawing::RaylibDrawHandle, math::Vector2, texture::Texture2D};
mod board;
mod tile;
@ -48,14 +50,19 @@ impl Machine {
}
}
pub fn draw(&self, d: &mut RaylibDrawHandle, offset: Vector2) {
pub fn draw(
&self,
d: &mut RaylibDrawHandle,
textures: &HashMap<String, Texture2D>,
offset: Vector2,
) {
let tile_size = 32;
for x in 0..self.board.width() {
for y in 0..self.board.height() {
if let Some(tile) = self.board.get((x, y).into()) {
let px = x as i32 * tile_size + offset.x as i32 + tile_size / 2;
let py = y as i32 * tile_size + offset.y as i32 + tile_size / 2;
tile.draw(d, px, py, tile_size);
tile.draw(d, textures, px, py, tile_size);
}
}
}
@ -66,10 +73,8 @@ impl Machine {
// reset wires
for y in 0..self.board.height() {
for x in 0..self.board.width() {
match self.board.get_mut((x, y).into()) {
Tile::Powerable(_, state) => *state = false,
Tile::Trigger(state) => *state = false,
_ => (),
if let Tile::Powerable(_, state) = self.board.get_mut((x, y).into()) {
*state = false;
}
}
}
@ -120,7 +125,7 @@ impl Machine {
*other_dir = dir;
}
}
Tile::Trigger(state) => {
Tile::Powerable(PTile::Trigger, state) => {
*state = true;
triggers.push(next_pos);
let far_pos = dir.step(next_pos);
@ -191,6 +196,9 @@ impl Machine {
let tile = self.board.get_mut(pos);
let front_pos = dir.step(pos);
if let Tile::Powerable(tile, state) = tile {
if let PTile::Trigger = tile {
return;
}
if *state {
return;
}
@ -285,6 +293,7 @@ impl Machine {
self.propagate_power(dir, dir.step(pos));
}
}
PTile::Trigger => (),
}
}
}
@ -316,7 +325,7 @@ pub fn parse(source: &str) -> Board {
value: 0,
dir: Direction::Down,
},
'*' => Tile::Trigger(false),
'*' => Tile::Powerable(PTile::Trigger, false),
'-' => Tile::Powerable(PTile::Wire(WireType::Horizontal), false),
'|' => Tile::Powerable(PTile::Wire(WireType::Vertical), false),
'+' => Tile::Powerable(PTile::Wire(WireType::Cross), false),