mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/walls.rs')
-rw-r--r--src/block/walls.rs28
1 files changed, 22 insertions, 6 deletions
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! {