mindustry logic execution, map- and schematic- parsing and rendering
-rw-r--r--assets/blocks/defense/barrier-projector-team.pngbin482 -> 0 bytes
-rw-r--r--assets/blocks/defense/barrier-projector.pngbin831 -> 0 bytes
-rw-r--r--assets/blocks/environment/arkyic-wall-large.pngbin527 -> 0 bytes
-rw-r--r--assets/blocks/environment/beryllic-stone-wall-large.pngbin538 -> 0 bytes
-rw-r--r--assets/blocks/environment/carbon-wall-large.pngbin559 -> 0 bytes
-rw-r--r--assets/blocks/environment/crystalline-stone-wall-large.pngbin555 -> 0 bytes
-rw-r--r--assets/blocks/environment/dacite-wall-large.pngbin497 -> 0 bytes
-rw-r--r--assets/blocks/environment/dark-metal-large.pngbin413 -> 0 bytes
-rw-r--r--assets/blocks/environment/dirt-wall-large.pngbin480 -> 0 bytes
-rw-r--r--assets/blocks/environment/dune-wall-large.pngbin647 -> 0 bytes
-rw-r--r--assets/blocks/environment/ferric-stone-wall-large.pngbin500 -> 0 bytes
-rw-r--r--assets/blocks/environment/graphitic-wall-large.pngbin759 -> 0 bytes
-rw-r--r--assets/blocks/environment/ice-wall-large.pngbin418 -> 0 bytes
-rw-r--r--assets/blocks/environment/red-ice-wall-large.pngbin563 -> 0 bytes
-rw-r--r--assets/blocks/environment/red-stone-wall-large.pngbin598 -> 0 bytes
-rw-r--r--assets/blocks/environment/regolith-wall-large.pngbin609 -> 0 bytes
-rw-r--r--assets/blocks/environment/rhyolite-wall-large.pngbin609 -> 0 bytes
-rw-r--r--assets/blocks/environment/salt-wall-large.pngbin357 -> 0 bytes
-rw-r--r--assets/blocks/environment/sand-wall-large.pngbin503 -> 0 bytes
-rw-r--r--assets/blocks/environment/shale-wall-large.pngbin362 -> 0 bytes
-rw-r--r--assets/blocks/environment/shrubs-large.pngbin366 -> 0 bytes
-rw-r--r--assets/blocks/environment/snow-wall-large.pngbin366 -> 0 bytes
-rw-r--r--assets/blocks/environment/spore-wall-large.pngbin359 -> 0 bytes
-rw-r--r--assets/blocks/environment/stone-wall-large.pngbin284 -> 0 bytes
-rw-r--r--assets/blocks/environment/yellow-stone-wall-large.pngbin488 -> 0 bytes
-rw-r--r--src/block/mod.rs35
-rw-r--r--src/block/payload.rs8
-rw-r--r--src/data/map.rs12
28 files changed, 18 insertions, 37 deletions
diff --git a/assets/blocks/defense/barrier-projector-team.png b/assets/blocks/defense/barrier-projector-team.png
deleted file mode 100644
index 9c0d534..0000000
--- a/assets/blocks/defense/barrier-projector-team.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/defense/barrier-projector.png b/assets/blocks/defense/barrier-projector.png
deleted file mode 100644
index 0b72218..0000000
--- a/assets/blocks/defense/barrier-projector.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/arkyic-wall-large.png b/assets/blocks/environment/arkyic-wall-large.png
deleted file mode 100644
index 6e1f48a..0000000
--- a/assets/blocks/environment/arkyic-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/beryllic-stone-wall-large.png b/assets/blocks/environment/beryllic-stone-wall-large.png
deleted file mode 100644
index 4f6eccf..0000000
--- a/assets/blocks/environment/beryllic-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/carbon-wall-large.png b/assets/blocks/environment/carbon-wall-large.png
deleted file mode 100644
index 653ae35..0000000
--- a/assets/blocks/environment/carbon-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/crystalline-stone-wall-large.png b/assets/blocks/environment/crystalline-stone-wall-large.png
deleted file mode 100644
index 17962ee..0000000
--- a/assets/blocks/environment/crystalline-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/dacite-wall-large.png b/assets/blocks/environment/dacite-wall-large.png
deleted file mode 100644
index a1d94c5..0000000
--- a/assets/blocks/environment/dacite-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/dark-metal-large.png b/assets/blocks/environment/dark-metal-large.png
deleted file mode 100644
index aba348c..0000000
--- a/assets/blocks/environment/dark-metal-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/dirt-wall-large.png b/assets/blocks/environment/dirt-wall-large.png
deleted file mode 100644
index 7e5f8f0..0000000
--- a/assets/blocks/environment/dirt-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/dune-wall-large.png b/assets/blocks/environment/dune-wall-large.png
deleted file mode 100644
index 737b09d..0000000
--- a/assets/blocks/environment/dune-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/ferric-stone-wall-large.png b/assets/blocks/environment/ferric-stone-wall-large.png
deleted file mode 100644
index a0bbb83..0000000
--- a/assets/blocks/environment/ferric-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/graphitic-wall-large.png b/assets/blocks/environment/graphitic-wall-large.png
deleted file mode 100644
index 0148959..0000000
--- a/assets/blocks/environment/graphitic-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/ice-wall-large.png b/assets/blocks/environment/ice-wall-large.png
deleted file mode 100644
index e0ffd14..0000000
--- a/assets/blocks/environment/ice-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/red-ice-wall-large.png b/assets/blocks/environment/red-ice-wall-large.png
deleted file mode 100644
index 7fe0b04..0000000
--- a/assets/blocks/environment/red-ice-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/red-stone-wall-large.png b/assets/blocks/environment/red-stone-wall-large.png
deleted file mode 100644
index 1cb7808..0000000
--- a/assets/blocks/environment/red-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/regolith-wall-large.png b/assets/blocks/environment/regolith-wall-large.png
deleted file mode 100644
index 271ed82..0000000
--- a/assets/blocks/environment/regolith-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-wall-large.png b/assets/blocks/environment/rhyolite-wall-large.png
deleted file mode 100644
index 187550b..0000000
--- a/assets/blocks/environment/rhyolite-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/salt-wall-large.png b/assets/blocks/environment/salt-wall-large.png
deleted file mode 100644
index 48aa491..0000000
--- a/assets/blocks/environment/salt-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/sand-wall-large.png b/assets/blocks/environment/sand-wall-large.png
deleted file mode 100644
index eed7bc9..0000000
--- a/assets/blocks/environment/sand-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/shale-wall-large.png b/assets/blocks/environment/shale-wall-large.png
deleted file mode 100644
index 0bdf3e2..0000000
--- a/assets/blocks/environment/shale-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/shrubs-large.png b/assets/blocks/environment/shrubs-large.png
deleted file mode 100644
index 26fb5d3..0000000
--- a/assets/blocks/environment/shrubs-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/snow-wall-large.png b/assets/blocks/environment/snow-wall-large.png
deleted file mode 100644
index d597a66..0000000
--- a/assets/blocks/environment/snow-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/spore-wall-large.png b/assets/blocks/environment/spore-wall-large.png
deleted file mode 100644
index 3e5b976..0000000
--- a/assets/blocks/environment/spore-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/stone-wall-large.png b/assets/blocks/environment/stone-wall-large.png
deleted file mode 100644
index 26173e9..0000000
--- a/assets/blocks/environment/stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone-wall-large.png b/assets/blocks/environment/yellow-stone-wall-large.png
deleted file mode 100644
index d3189b2..0000000
--- a/assets/blocks/environment/yellow-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/src/block/mod.rs b/src/block/mod.rs
index dda19a5..c61f538 100644
--- a/src/block/mod.rs
+++ b/src/block/mod.rs
@@ -578,6 +578,17 @@ macro_rules! make_register {
pub static BLOCK_REGISTRY: phf::Map<&str, &Block> = phf::phf_map! {$(
$field => &[<$field:snake:upper>],
)+};
+
+ impl content::Type {
+ pub fn to_block(self) -> Option<&'static Block> {
+ // static L: &[&Block] = &[$(&[<$field:snake:upper>],)+];
+ // L.get(self as usize).copied()
+ match self {
+ $(content::Type::[<$field:camel>] => Some(&[<$field:snake:upper>]),)+
+ _ => None,
+ }
+ }
+ }
}};
(impl $field: literal => $logic: expr) => {
paste::paste! { pub static [<$field:snake:upper>]: Block = Block::new(
@@ -615,7 +626,6 @@ make_register! {
"ore-wall-thorium": 1;
"ore-wall-tungsten": 1;
"graphitic-wall": 1;
- "graphitic-wall-large": 2;
"dacite": 1;
"dirt": 1;
"arkycite-floor": 1;
@@ -654,83 +664,61 @@ make_register! {
"build1": 1;
"boulder": 1;
"arkyic-vent": 1;
- "arkyic-wall-large": 2;
"arkyic-wall": 1;
- "beryllic-stone-wall-large": 2;
"beryllic-stone-wall": 1;
"beryllic-stone": 1;
"bluemat": 1;
"carbon-vent": 1;
- "carbon-wall-large": 2;
"carbon-wall": 1;
"cliff": 1;
"core-zone": 1;
"crater-stone": 1;
"crystal-floor": 1;
- "crystalline-stone-wall-large": 2;
"crystalline-stone-wall": 1;
"crystalline-stone": 1;
"crystalline-vent": 3;
- "dacite-wall-large": 2;
"dacite-wall": 1;
- "dark-metal-large": 2;
"dark-metal": 1;
"metal-floor-damaged": 1;
"dense-red-stone": 1;
- "dirt-wall-large": 2;
"dirt-wall": 1;
- "dune-wall-large": 2;
"dune-wall": 1;
"ferric-craters": 1; // ferris section
- "ferric-stone-wall-large": 2;
"ferric-stone-wall": 1;
"ferric-stone": 1;
- "ice-wall-large": 2;
"ice-wall": 1;
"pebbles": 1;
"pine": 1;
"pooled-cryofluid": 1;
"red-diamond-wall": 1;
- "red-ice-wall-large": 2;
"red-ice-wall": 1;
"red-ice": 1;
"red-stone-vent": 1;
- "red-stone-wall-large": 2;
"red-stone-wall": 1;
"red-stone": 1;
"redmat": 1;
- "regolith-wall-large": 2;
"regolith-wall": 1;
"regolith": 1;
"rhyolite-crater": 1;
"rhyolite-vent": 1;
- "rhyolite-wall-large": 2;
"rhyolite-wall": 1;
"rhyolite": 1;
"rough-rhyolite": 1;
- "salt-wall-large": 2;
"salt-wall": 1;
- "sand-wall-large": 2;
"sand-wall": 1;
- "shale-wall-large": 2;
"shale-wall": 1;
- "shrubs-large": 2;
"shrubs": 1;
"snow-pine": 1;
- "snow-wall-large": 2;
"snow-wall": 1;
"spawn": 1;
"spore-moss": 1;
"spore-pine": 1;
- "spore-wall-large": 2;
"spore-wall": 1;
- "stone-wall-large": 2;
"stone-wall": 1;
"tainted-water": 1;
"tar": 1;
"yellow-stone-plates": 1;
"yellow-stone-vent": 1;
- "yellow-stone-wall-large": 2;
"yellow-stone-wall": 1;
// props
"yellow-stone-boulder": 1;
@@ -1022,7 +1010,6 @@ make_register! {
"world-cell" -> MemoryBlock::new(1, true, &[]);
"liquid-source" => FluidBlock::new(1, true, &[]);
"liquid-void" -> BasicBlock::new(1, true, &[]);
- "barrier-projector" -> BasicBlock::new(3, true, &[]);
"shield-projector" -> ShieldBlock::new(3, true, &[]);
"large-shield-projector" -> ShieldBlock::new(4, true, &[]);
"payload-source" => PayloadBlock::new(5, false, &[]);
diff --git a/src/block/payload.rs b/src/block/payload.rs
index 48b8e67..9b1970b 100644
--- a/src/block/payload.rs
+++ b/src/block/payload.rs
@@ -4,7 +4,7 @@ use thiserror::Error;
use crate::block::content::Type as BlockEnum;
use crate::block::simple::*;
use crate::block::{self, *};
-use crate::content::{self, Content};
+use crate::content;
use crate::data::dynamic::DynType;
use crate::data::entity_mapping;
use crate::data::ReadError;
@@ -215,8 +215,10 @@ pub fn read_payload(buff: &mut DataRead) -> Result<(), DataReadError> {
BLOCK => {
let b = buff.read_u16()?;
buff.skip(1)?;
- let b = BlockEnum::try_from(b).unwrap_or(BlockEnum::Router);
- let block = BLOCK_REGISTRY.get(b.get_name()).unwrap();
+ let block = BlockEnum::try_from(b)
+ .unwrap_or(BlockEnum::Router)
+ .to_block()
+ .expect("payload should not be a environment block");
let mut b = Build::new(block);
let _ = b.read(buff);
}
diff --git a/src/data/map.rs b/src/data/map.rs
index c4ad43d..b25ce94 100644
--- a/src/data/map.rs
+++ b/src/data/map.rs
@@ -74,7 +74,7 @@ use std::ops::{Index, IndexMut};
use thiserror::Error;
use crate::block::content::Type as BlockEnum;
-use crate::block::{Block, Rotation, State, BLOCK_REGISTRY};
+use crate::block::{Block, Rotation, State};
use crate::data::dynamic::DynData;
use crate::data::renderer::*;
use crate::data::DataRead;
@@ -594,15 +594,7 @@ impl<'l> Serializable for Map<'l> {
let central = if entity { buff.read_bool()? } else { false };
let block = BlockEnum::try_from(block_id)
.map_err(|_| ReadError::NoSuchBlock(block_id.to_string()))?;
- let block = if block == BlockEnum::Air {
- None
- } else {
- Some(
- BLOCK_REGISTRY
- .get(block.get_name())
- .ok_or_else(|| ReadError::NoSuchBlock(block.to_string()))?,
- )
- };
+ let block = block.to_block();
if central && let Some(block) = block {
map[i].set_block(block);
}