add sprites for most tiles
This commit is contained in:
parent
12bd19a7f3
commit
d4f9be5bff
41 changed files with 108 additions and 63 deletions
|
@ -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),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue