mindustry logic execution, map- and schematic- parsing and rendering
fix scrap walls
bendn 2023-07-19
parent 559923d · commit 12e4e9b
-rw-r--r--Cargo.toml2
-rw-r--r--src/block/walls.rs28
-rw-r--r--src/utils/image.rs10
3 files changed, 31 insertions, 9 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 930972c..de2e786 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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);