mindustry logic execution, map- and schematic- parsing and rendering
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 Binary files differdeleted file mode 100644 index 9c0d534..0000000 --- a/assets/blocks/defense/barrier-projector-team.png +++ /dev/null diff --git a/assets/blocks/defense/barrier-projector.png b/assets/blocks/defense/barrier-projector.png Binary files differdeleted file mode 100644 index 0b72218..0000000 --- a/assets/blocks/defense/barrier-projector.png +++ /dev/null diff --git a/assets/blocks/environment/arkyic-wall-large.png b/assets/blocks/environment/arkyic-wall-large.png Binary files differdeleted file mode 100644 index 6e1f48a..0000000 --- a/assets/blocks/environment/arkyic-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/beryllic-stone-wall-large.png b/assets/blocks/environment/beryllic-stone-wall-large.png Binary files differdeleted file mode 100644 index 4f6eccf..0000000 --- a/assets/blocks/environment/beryllic-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/carbon-wall-large.png b/assets/blocks/environment/carbon-wall-large.png Binary files differdeleted file mode 100644 index 653ae35..0000000 --- a/assets/blocks/environment/carbon-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/crystalline-stone-wall-large.png b/assets/blocks/environment/crystalline-stone-wall-large.png Binary files differdeleted file mode 100644 index 17962ee..0000000 --- a/assets/blocks/environment/crystalline-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/dacite-wall-large.png b/assets/blocks/environment/dacite-wall-large.png Binary files differdeleted file mode 100644 index a1d94c5..0000000 --- a/assets/blocks/environment/dacite-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/dark-metal-large.png b/assets/blocks/environment/dark-metal-large.png Binary files differdeleted file mode 100644 index aba348c..0000000 --- a/assets/blocks/environment/dark-metal-large.png +++ /dev/null diff --git a/assets/blocks/environment/dirt-wall-large.png b/assets/blocks/environment/dirt-wall-large.png Binary files differdeleted file mode 100644 index 7e5f8f0..0000000 --- a/assets/blocks/environment/dirt-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/dune-wall-large.png b/assets/blocks/environment/dune-wall-large.png Binary files differdeleted file mode 100644 index 737b09d..0000000 --- a/assets/blocks/environment/dune-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/ferric-stone-wall-large.png b/assets/blocks/environment/ferric-stone-wall-large.png Binary files differdeleted file mode 100644 index a0bbb83..0000000 --- a/assets/blocks/environment/ferric-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/graphitic-wall-large.png b/assets/blocks/environment/graphitic-wall-large.png Binary files differdeleted file mode 100644 index 0148959..0000000 --- a/assets/blocks/environment/graphitic-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/ice-wall-large.png b/assets/blocks/environment/ice-wall-large.png Binary files differdeleted file mode 100644 index e0ffd14..0000000 --- a/assets/blocks/environment/ice-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/red-ice-wall-large.png b/assets/blocks/environment/red-ice-wall-large.png Binary files differdeleted file mode 100644 index 7fe0b04..0000000 --- a/assets/blocks/environment/red-ice-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/red-stone-wall-large.png b/assets/blocks/environment/red-stone-wall-large.png Binary files differdeleted file mode 100644 index 1cb7808..0000000 --- a/assets/blocks/environment/red-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/regolith-wall-large.png b/assets/blocks/environment/regolith-wall-large.png Binary files differdeleted file mode 100644 index 271ed82..0000000 --- a/assets/blocks/environment/regolith-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite-wall-large.png b/assets/blocks/environment/rhyolite-wall-large.png Binary files differdeleted file mode 100644 index 187550b..0000000 --- a/assets/blocks/environment/rhyolite-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/salt-wall-large.png b/assets/blocks/environment/salt-wall-large.png Binary files differdeleted file mode 100644 index 48aa491..0000000 --- a/assets/blocks/environment/salt-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/sand-wall-large.png b/assets/blocks/environment/sand-wall-large.png Binary files differdeleted file mode 100644 index eed7bc9..0000000 --- a/assets/blocks/environment/sand-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/shale-wall-large.png b/assets/blocks/environment/shale-wall-large.png Binary files differdeleted file mode 100644 index 0bdf3e2..0000000 --- a/assets/blocks/environment/shale-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/shrubs-large.png b/assets/blocks/environment/shrubs-large.png Binary files differdeleted file mode 100644 index 26fb5d3..0000000 --- a/assets/blocks/environment/shrubs-large.png +++ /dev/null diff --git a/assets/blocks/environment/snow-wall-large.png b/assets/blocks/environment/snow-wall-large.png Binary files differdeleted file mode 100644 index d597a66..0000000 --- a/assets/blocks/environment/snow-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/spore-wall-large.png b/assets/blocks/environment/spore-wall-large.png Binary files differdeleted file mode 100644 index 3e5b976..0000000 --- a/assets/blocks/environment/spore-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/stone-wall-large.png b/assets/blocks/environment/stone-wall-large.png Binary files differdeleted file mode 100644 index 26173e9..0000000 --- a/assets/blocks/environment/stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/yellow-stone-wall-large.png b/assets/blocks/environment/yellow-stone-wall-large.png Binary files differdeleted file mode 100644 index d3189b2..0000000 --- a/assets/blocks/environment/yellow-stone-wall-large.png +++ /dev/null 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); } |