mindustry logic execution, map- and schematic- parsing and rendering
fix scrap walls
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/block/walls.rs | 28 | ||||
| -rw-r--r-- | src/utils/image.rs | 10 |
3 files changed, 31 insertions, 9 deletions
@@ -1,6 +1,6 @@ [package] name = "mindus" -version = "1.1.0" +version = "1.1.2" edition = "2021" description = "A library for working with mindustry data formats (eg schematics) (fork of plandustry)" authors = [ diff --git a/src/block/walls.rs b/src/block/walls.rs index a0e3c45..2e58189 100644 --- a/src/block/walls.rs +++ b/src/block/walls.rs @@ -3,15 +3,31 @@ use crate::block::simple::*; use crate::block::*; use crate::data::dynamic::DynType; use crate::data::renderer::{load, read_with, ImageHolder, TOP}; +use tinyrand::{Rand, RandRange, Seeded, StdRand}; +use tinyrand_std::clock_seed::ClockSeed; make_simple!(WallBlock, |_, _, name, _, _| { - if name == "thruster" { - const SFX: &[&str; 1] = &[TOP]; - return Some(ImageHolder::Own(read_with( - "turrets", "thruster", SFX, 4u32, - ))); + macro_rules! pick { + ($name: literal => load $n: literal) => {{ + let mut rand = StdRand::seed(ClockSeed::default().next_u64()); + Some(ImageHolder::from(load( + "walls", + &format!("{}{}", $name, rand.next_range(1usize..$n)), + ))) + }}; + } + match name { + "thruster" => { + const SFX: &[&str; 1] = &[TOP]; + Some(ImageHolder::from(read_with( + "turrets", "thruster", SFX, 4u32, + ))) + } + "scrap-wall" => pick!("scrap-wall" => load 5), + "scrap-wall-large" => pick!("scrap-wall-large" => load 3), + "scrap-wall-huge" => pick!("scrap-wall-huge" => load 3), + _ => Some(ImageHolder::from(load("walls", name))), } - Some(ImageHolder::Borrow(load("walls", name).unwrap())) }); make_register! { diff --git a/src/utils/image.rs b/src/utils/image.rs index 959b633..d120209 100644 --- a/src/utils/image.rs +++ b/src/utils/image.rs @@ -1,7 +1,7 @@ +use blurslice::gaussian_blur_bytes; use fast_image_resize as fr; use image::{GenericImageView, Rgb, Rgba, RgbaImage}; use std::num::NonZeroU32; -use blurslice::gaussian_blur_bytes; pub trait ImageUtils { /// Tint this image with the color @@ -103,7 +103,13 @@ impl ImageUtils for RgbaImage { let mut shadow = self.clone(); shadow.silhouette(); let samples = shadow.as_flat_samples_mut(); - gaussian_blur_bytes::<4>(samples.samples, self.width() as usize, self.height() as usize, 9.0).unwrap(); + gaussian_blur_bytes::<4>( + samples.samples, + self.width() as usize, + self.height() as usize, + 9.0, + ) + .unwrap(); for x in 0..shadow.width() { for y in 0..shadow.height() { let Rgba([r, g, b, a]) = self.get_pixel_mut(x, y); |