mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/environment.rs')
-rw-r--r--src/block/environment.rs184
1 files changed, 184 insertions, 0 deletions
diff --git a/src/block/environment.rs b/src/block/environment.rs
new file mode 100644
index 0000000..9eee40c
--- /dev/null
+++ b/src/block/environment.rs
@@ -0,0 +1,184 @@
+//! grass
+use crate::block::make_register;
+use crate::block::simple::make_simple;
+use crate::data::renderer::*;
+use tinyrand::{Rand, RandRange, Seeded, StdRand};
+use tinyrand_std::clock_seed::ClockSeed;
+
+macro_rules! register_env {
+ ($($field:literal: $size:literal @ $variations:literal;)+) => {
+ make_register!(
+ $($field => EnvironmentBlock::new($size, true, &[]);)*
+ );
+
+ make_simple!(EnvironmentBlock, |_, _, name, _| {
+ let mut rand = StdRand::seed(ClockSeed::default().next_u64());
+ match name {
+ $($field => {
+ #[allow(clippy::reversed_empty_ranges)]
+ if $variations == 1 { Some(ImageHolder::Borrow(load("environment", $field).unwrap())) }
+ else if $variations == 0 { return None }
+ else { Some(ImageHolder::Borrow(load("environment", &format!("{}{}", $field, rand.next_range(1usize..$variations))).unwrap())) }
+ },)*
+ _ => { unreachable!() }
+ }
+ });
+ };
+}
+
+register_env! {
+ "build1": 1@0;
+ "build2": 1@0;
+ "build3": 1@0;
+ "arkycite-floor": 1@1;
+ "arkyic-stone": 1@3;
+ "arkyic-vent": 3@2;
+ "arkyic-wall-large": 2@1;
+ "arkyic-wall": 1@3;
+ "basalt": 1@3;
+ "beryllic-stone-wall-large": 2@1;
+ "beryllic-stone-wall": 1@2;
+ "beryllic-stone": 1@4;
+ "bluemat": 1@3;
+ "carbon-stone": 1@4;
+ "carbon-vent": 3@2;
+ "carbon-wall-large": 2@1;
+ "carbon-wall": 1@2;
+ "char": 1@3;
+ "cliff": 1@7;
+ "core-zone": 1@1;
+ "crater-stone": 1@6;
+ "crystal-floor": 1@4;
+ "crystalline-stone-wall-large": 2@1;
+ "crystalline-stone-wall": 1@4;
+ "crystalline-stone": 1@5;
+ "crystalline-vent": 3@2;
+ "dacite-wall-large": 2@1;
+ "dacite-wall": 1@2;
+ "dacite": 1@3;
+ "dark-metal-large": 2@1;
+ "dark-metal": 1@2;
+ "dark-panel-1": 1@1;
+ "dark-panel-2": 1@1;
+ "dark-panel-3": 1@1;
+ "dark-panel-4": 1@1;
+ "dark-panel-5": 1@1;
+ "dark-panel-6": 1@1;
+ "metal-floor": 1@1;
+ "metal-floor-2": 1@1;
+ "metal-floor-3": 1@1;
+ "metal-floor-4": 1@1;
+ "metal-floor-5": 1@1;
+ "metal-floor-damaged": 1@3;
+ "darksand-tainted-water": 1@1;
+ "darksand-water": 1@1;
+ "darksand": 1@3;
+ "deep-tainted-water": 1@1;
+ "deep-water": 1@1;
+ "dense-red-stone": 1@4;
+ "dirt-wall-large": 2@1;
+ "dirt-wall": 1@2;
+ "dirt": 1@3;
+ "dune-wall-large": 2@1;
+ "dune-wall": 1@2;
+ "ferric-craters": 1@3; // ferris section
+ "ferric-stone-wall-large": 2@1;
+ "ferric-stone-wall": 1@2;
+ "ferric-stone": 1@4;
+ "graphite-wall-large": 2@1;
+ "graphite-wall": 1@3;
+ "grass": 1@3;
+ "hotrock": 1@3;
+ "ice-snow": 1@3;
+ "ice-wall-large": 2@1;
+ "ice-wall": 1@2;
+ "ice": 1@3;
+ "magmarock": 1@3;
+ "molten-slag": 1@1;
+ "moss": 1@3;
+ "mud": 1@3;
+ "ore-beryllium": 1@3;
+ "ore-coal": 1@3;
+ "ore-copper": 1@3;
+ "ore-crystal-thorium": 1@3;
+ "ore-lead": 1@3;
+ "ore-scrap": 1@3;
+ "ore-thorium": 1@3;
+ "ore-titanium": 1@3;
+ "ore-tungsten": 1@3;
+ "ore-wall-beryllium": 1@3;
+ "ore-wall-thorium": 1@3;
+ "ore-wall-tungsten": 1@3;
+ "pebbles": 1@3;
+ "pine": 1@1;
+ "pooled-cryofluid": 1@1;
+ "red-diamond-wall": 1@3;
+ "red-ice-wall-large": 2@1;
+ "red-ice": 1@3;
+ "red-stone-vent": 3@2;
+ "red-stone-wall-large": 2@1;
+ "red-stone-wall": 1@3;
+ "red-stone": 1@4;
+ "redmat": 1@3;
+ "regolith-wall-large": 2@1;
+ "regolith": 1@3;
+ "rhyolite-crater": 1@3;
+ "rhyolite-vent": 3@2;
+ "rhyolite-wall-large": 2@1;
+ "rhyolite-wall": 1@2;
+ "rhyolite": 1@3;
+ "rough-rhyolite": 1@3;
+ "salt-wall-large": 2@1;
+ "salt-wall": 1@2;
+ "salt": 1@1;
+ "sand-floor": 1@3;
+ "sand-wall-large": 2@1;
+ "sand-wall": 1@2;
+ "sand-water": 1@1;
+ "shale-wall-large": 2@1;
+ "shale-wall": 1@2;
+ "shale": 1@3;
+ "shallow-water": 1@1;
+ "shrubs-large": 2@1;
+ "shrubs": 1@2;
+ "snow-pine": 1@1;
+ "snow-wall-large": 2@1;
+ "snow-wall": 1@2;
+ "snow": 1@3;
+ "space": 1@1;
+ "spawn": 1@1;
+ "spore-moss": 1@3;
+ "spore-pine": 1@1;
+ "spore-wall-large": 2@1;
+ "spore-wall": 1@2;
+ "stone-wall-large": 2@1;
+ "stone-wall": 1@2;
+ "stone": 1@3;
+ "tainted-water": 1@1;
+ "tar": 1@1;
+ "yellow-stone-plates": 1@3;
+ "yellow-stone-vent": 3@2;
+ "yellow-stone-wall-large": 2@1;
+ "yellow-stone-wall": 1@2;
+ "yellow-stone": 1@3;
+ // props
+ "snow-boulder": 1@2;
+ "shale-boulder": 1@2;
+ "arkyic-boulder": 1@3;
+ "basalt-boulder": 1@2;
+ "beryllic-boulder": 1@2;
+ "boulder": 1@2;
+ "carbon-boulder": 1@2;
+ "crystalline-boulder": 1@2;
+ "dacite-boulder": 1@2;
+ "ferric-boulder": 1@2;
+ "red-ice-boulder": 1@3;
+ "red-stone-boulder": 1@4;
+ "rhyolite-boulder": 1@3;
+ "sand-boulder": 1@2;
+ "yellow-sand-boulder": 1@2;
+ // these are tall but uh
+ "crystal-blocks": 1@3;
+ "crytal-cluster": 1@3;
+ "crystal-orbs": 1@3;
+}