mindustry logic execution, map- and schematic- parsing and rendering
ducts
49 files changed, 73 insertions, 19 deletions
@@ -1,6 +1,6 @@ [package] name = "mindus" -version = "1.2.0" +version = "1.3.0" edition = "2021" description = "A library for working with mindustry data formats (eg schematics) (fork of plandustry)" authors = [ diff --git a/assets/blocks/distribution/cross.png b/assets/blocks/distribution/cross.png Binary files differdeleted file mode 100644 index 0d9dea8..0000000 --- a/assets/blocks/distribution/cross.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-0.png b/assets/blocks/distribution/ducts/armored-duct-0.png Binary files differnew file mode 100644 index 0000000..3a661b6 --- /dev/null +++ b/assets/blocks/distribution/ducts/armored-duct-0.png diff --git a/assets/blocks/distribution/ducts/armored-duct-1.png b/assets/blocks/distribution/ducts/armored-duct-1.png Binary files differnew file mode 100644 index 0000000..d4b81d8 --- /dev/null +++ b/assets/blocks/distribution/ducts/armored-duct-1.png diff --git a/assets/blocks/distribution/ducts/armored-duct-2.png b/assets/blocks/distribution/ducts/armored-duct-2.png Binary files differnew file mode 100644 index 0000000..fd0c731 --- /dev/null +++ b/assets/blocks/distribution/ducts/armored-duct-2.png diff --git a/assets/blocks/distribution/ducts/armored-duct-3.png b/assets/blocks/distribution/ducts/armored-duct-3.png Binary files differnew file mode 100644 index 0000000..9371f1c --- /dev/null +++ b/assets/blocks/distribution/ducts/armored-duct-3.png diff --git a/assets/blocks/distribution/ducts/armored-duct-4.png b/assets/blocks/distribution/ducts/armored-duct-4.png Binary files differnew file mode 100644 index 0000000..e1e2cab --- /dev/null +++ b/assets/blocks/distribution/ducts/armored-duct-4.png diff --git a/assets/blocks/distribution/ducts/armored-duct-top-0.png b/assets/blocks/distribution/ducts/armored-duct-top-0.png Binary files differdeleted file mode 100644 index 2de29f2..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-top-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-top-1.png b/assets/blocks/distribution/ducts/armored-duct-top-1.png Binary files differdeleted file mode 100644 index 24700e6..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-top-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-top-2.png b/assets/blocks/distribution/ducts/armored-duct-top-2.png Binary files differdeleted file mode 100644 index a28ab6d..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-top-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-top-3.png b/assets/blocks/distribution/ducts/armored-duct-top-3.png Binary files differdeleted file mode 100644 index 98b5979..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-top-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-top-4.png b/assets/blocks/distribution/ducts/armored-duct-top-4.png Binary files differdeleted file mode 100644 index 6d529f2..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-top-4.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-0.png b/assets/blocks/distribution/ducts/duct-0.png Binary files differnew file mode 100644 index 0000000..4112edc --- /dev/null +++ b/assets/blocks/distribution/ducts/duct-0.png diff --git a/assets/blocks/distribution/ducts/duct-1.png b/assets/blocks/distribution/ducts/duct-1.png Binary files differnew file mode 100644 index 0000000..6adcdeb --- /dev/null +++ b/assets/blocks/distribution/ducts/duct-1.png diff --git a/assets/blocks/distribution/ducts/duct-2.png b/assets/blocks/distribution/ducts/duct-2.png Binary files differnew file mode 100644 index 0000000..0192770 --- /dev/null +++ b/assets/blocks/distribution/ducts/duct-2.png diff --git a/assets/blocks/distribution/ducts/duct-3.png b/assets/blocks/distribution/ducts/duct-3.png Binary files differnew file mode 100644 index 0000000..e0ce754 --- /dev/null +++ b/assets/blocks/distribution/ducts/duct-3.png diff --git a/assets/blocks/distribution/ducts/duct-4.png b/assets/blocks/distribution/ducts/duct-4.png Binary files differnew file mode 100644 index 0000000..2bba535 --- /dev/null +++ b/assets/blocks/distribution/ducts/duct-4.png diff --git a/assets/blocks/distribution/ducts/duct-base.png b/assets/blocks/distribution/ducts/duct-base.png Binary files differnew file mode 100644 index 0000000..6aa0df3 --- /dev/null +++ b/assets/blocks/distribution/ducts/duct-base.png diff --git a/assets/blocks/distribution/ducts/duct-bottom-0.png b/assets/blocks/distribution/ducts/duct-bottom-0.png Binary files differdeleted file mode 100644 index 329fc2f..0000000 --- a/assets/blocks/distribution/ducts/duct-bottom-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bottom-1.png b/assets/blocks/distribution/ducts/duct-bottom-1.png Binary files differdeleted file mode 100644 index 6e793c7..0000000 --- a/assets/blocks/distribution/ducts/duct-bottom-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bottom-2.png b/assets/blocks/distribution/ducts/duct-bottom-2.png Binary files differdeleted file mode 100644 index a2dd7b5..0000000 --- a/assets/blocks/distribution/ducts/duct-bottom-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bottom-3.png b/assets/blocks/distribution/ducts/duct-bottom-3.png Binary files differdeleted file mode 100644 index a2dd7b5..0000000 --- a/assets/blocks/distribution/ducts/duct-bottom-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bottom-4.png b/assets/blocks/distribution/ducts/duct-bottom-4.png Binary files differdeleted file mode 100644 index a2dd7b5..0000000 --- a/assets/blocks/distribution/ducts/duct-bottom-4.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bottom.png b/assets/blocks/distribution/ducts/duct-bottom.png Binary files differdeleted file mode 100644 index 04cecf2..0000000 --- a/assets/blocks/distribution/ducts/duct-bottom.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bridge-arrow.png b/assets/blocks/distribution/ducts/duct-bridge-arrow.png Binary files differindex f47060e..ce38b2e 100644 --- a/assets/blocks/distribution/ducts/duct-bridge-arrow.png +++ b/assets/blocks/distribution/ducts/duct-bridge-arrow.png diff --git a/assets/blocks/distribution/ducts/duct-bridge-bridge.png b/assets/blocks/distribution/ducts/duct-bridge-bridge.png Binary files differindex ff853ce..533f3c3 100644 --- a/assets/blocks/distribution/ducts/duct-bridge-bridge.png +++ b/assets/blocks/distribution/ducts/duct-bridge-bridge.png diff --git a/assets/blocks/distribution/ducts/duct-bridge-dir.png b/assets/blocks/distribution/ducts/duct-bridge-dir.png Binary files differindex 8349ac6..c889e17 100644 --- a/assets/blocks/distribution/ducts/duct-bridge-dir.png +++ b/assets/blocks/distribution/ducts/duct-bridge-dir.png diff --git a/assets/blocks/distribution/ducts/duct-bridge.png b/assets/blocks/distribution/ducts/duct-bridge.png Binary files differindex 428785c..2448bc8 100644 --- a/assets/blocks/distribution/ducts/duct-bridge.png +++ b/assets/blocks/distribution/ducts/duct-bridge.png diff --git a/assets/blocks/distribution/ducts/duct-router-top.png b/assets/blocks/distribution/ducts/duct-router-top.png Binary files differdeleted file mode 100644 index f93d863..0000000 --- a/assets/blocks/distribution/ducts/duct-router-top.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-router.png b/assets/blocks/distribution/ducts/duct-router.png Binary files differindex 428785c..2448bc8 100644 --- a/assets/blocks/distribution/ducts/duct-router.png +++ b/assets/blocks/distribution/ducts/duct-router.png diff --git a/assets/blocks/distribution/ducts/duct-top-0.png b/assets/blocks/distribution/ducts/duct-top-0.png Binary files differdeleted file mode 100644 index eae68cb..0000000 --- a/assets/blocks/distribution/ducts/duct-top-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-top-1.png b/assets/blocks/distribution/ducts/duct-top-1.png Binary files differdeleted file mode 100644 index 2e1b8c0..0000000 --- a/assets/blocks/distribution/ducts/duct-top-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-top-2.png b/assets/blocks/distribution/ducts/duct-top-2.png Binary files differdeleted file mode 100644 index 10fde0b..0000000 --- a/assets/blocks/distribution/ducts/duct-top-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-top-3.png b/assets/blocks/distribution/ducts/duct-top-3.png Binary files differdeleted file mode 100644 index 33798f2..0000000 --- a/assets/blocks/distribution/ducts/duct-top-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-top-4.png b/assets/blocks/distribution/ducts/duct-top-4.png Binary files differdeleted file mode 100644 index adad9a7..0000000 --- a/assets/blocks/distribution/ducts/duct-top-4.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-unloader-arrow.png b/assets/blocks/distribution/ducts/duct-unloader-arrow.png Binary files differindex 1ece44e..4b1e81b 100644 --- a/assets/blocks/distribution/ducts/duct-unloader-arrow.png +++ b/assets/blocks/distribution/ducts/duct-unloader-arrow.png diff --git a/assets/blocks/distribution/ducts/duct-unloader-center.png b/assets/blocks/distribution/ducts/duct-unloader-center.png Binary files differdeleted file mode 100644 index 19def6b..0000000 --- a/assets/blocks/distribution/ducts/duct-unloader-center.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-unloader-top.png b/assets/blocks/distribution/ducts/duct-unloader-top.png Binary files differindex 5f2cff7..39aa94c 100644 --- a/assets/blocks/distribution/ducts/duct-unloader-top.png +++ b/assets/blocks/distribution/ducts/duct-unloader-top.png diff --git a/assets/blocks/distribution/ducts/duct-unloader.png b/assets/blocks/distribution/ducts/duct-unloader.png Binary files differindex 5791261..908b66b 100644 --- a/assets/blocks/distribution/ducts/duct-unloader.png +++ b/assets/blocks/distribution/ducts/duct-unloader.png diff --git a/assets/blocks/distribution/ducts/overflow-duct-top.png b/assets/blocks/distribution/ducts/overflow-duct-top.png Binary files differdeleted file mode 100644 index 7a6637d..0000000 --- a/assets/blocks/distribution/ducts/overflow-duct-top.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/overflow-duct.png b/assets/blocks/distribution/ducts/overflow-duct.png Binary files differindex 0f647a8..1d0c98e 100644 --- a/assets/blocks/distribution/ducts/overflow-duct.png +++ b/assets/blocks/distribution/ducts/overflow-duct.png diff --git a/assets/blocks/distribution/ducts/surge-router-top.png b/assets/blocks/distribution/ducts/surge-router-top.png Binary files differindex f93d863..2769d6f 100644 --- a/assets/blocks/distribution/ducts/surge-router-top.png +++ b/assets/blocks/distribution/ducts/surge-router-top.png diff --git a/assets/blocks/distribution/ducts/surge-router.png b/assets/blocks/distribution/ducts/surge-router.png Binary files differindex 99a48d8..c1cf722 100644 --- a/assets/blocks/distribution/ducts/surge-router.png +++ b/assets/blocks/distribution/ducts/surge-router.png diff --git a/assets/blocks/distribution/ducts/top.png b/assets/blocks/distribution/ducts/top.png Binary files differnew file mode 100644 index 0000000..2769d6f --- /dev/null +++ b/assets/blocks/distribution/ducts/top.png diff --git a/assets/blocks/distribution/ducts/underflow-duct-top.png b/assets/blocks/distribution/ducts/underflow-duct-top.png Binary files differdeleted file mode 100644 index b986bc3..0000000 --- a/assets/blocks/distribution/ducts/underflow-duct-top.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/underflow-duct.png b/assets/blocks/distribution/ducts/underflow-duct.png Binary files differindex 0f647a8..f36bc41 100644 --- a/assets/blocks/distribution/ducts/underflow-duct.png +++ b/assets/blocks/distribution/ducts/underflow-duct.png diff --git a/assets/blocks/units/unit-cargo-unload-point-top.png b/assets/blocks/distribution/unit-cargo-unload-point-top.png Binary files differindex 025178c..025178c 100644 --- a/assets/blocks/units/unit-cargo-unload-point-top.png +++ b/assets/blocks/distribution/unit-cargo-unload-point-top.png diff --git a/assets/blocks/units/unit-cargo-unload-point.png b/assets/blocks/distribution/unit-cargo-unload-point.png Binary files differindex 29d5c9a..29d5c9a 100644 --- a/assets/blocks/units/unit-cargo-unload-point.png +++ b/assets/blocks/distribution/unit-cargo-unload-point.png diff --git a/src/block/distribution.rs b/src/block/distribution.rs index 03b9295..c569328 100644 --- a/src/block/distribution.rs +++ b/src/block/distribution.rs @@ -9,13 +9,22 @@ use crate::item; make_simple!( ConveyorBlock, |_, _, name, _, ctx: Option<&RenderingContext>| { - let ctx = ctx.unwrap(); // we specified want_context to true + let ctx = ctx.unwrap(); // we set want_context to true Some(tile(ctx, "distribution", "conveyors", name, ctx.rotation)) }, true ); make_simple!( + DuctBlock, + |_, _, name, _, ctx: Option<&RenderingContext>| { + let ctx = ctx.unwrap(); + Some(tile(ctx, "distribution", "ducts", name, ctx.rotation)) + }, + true +); + +make_simple!( JunctionBlock, |_, _, _, _, _| None, |_, _, _, _, _, buff: &mut crate::data::DataRead| { @@ -34,6 +43,18 @@ make_simple!( false ); +make_simple!( + SimpleDuctBlock, + |_, _, name, _, ctx: Option<&RenderingContext>| { + let ctx = ctx.unwrap(); + let mut base = load("distribution/ducts", "duct-base").unwrap().clone(); + let mut top = load("distribution/ducts", name).unwrap().clone(); + top.rotate(ctx.rotation.rotated(false).count()); + base.overlay(&top, 0, 0); + Some(ImageHolder::from(base)) + }, + true +); make_simple!(ControlBlock); make_register! { @@ -51,11 +72,11 @@ make_register! { "overflow-gate" => ControlBlock::new(1, true, cost!(Copper: 4, Lead: 2)); "underflow-gate" => ControlBlock::new(1, true, cost!(Copper: 4, Lead: 2)); "mass-driver" => BridgeBlock::new(3, true, cost!(Lead: 125, Titanium: 125, Thorium: 50, Silicon: 75), 55, false); - "duct" => ControlBlock::new(1, false, cost!(Beryllium: 1)); - "armored-duct" => ControlBlock::new(1, false, cost!(Beryllium: 2, Tungsten: 1)); + "duct" => DuctBlock::new(1, false, cost!(Beryllium: 1)); + "armored-duct" => DuctBlock::new(1, false, cost!(Beryllium: 2, Tungsten: 1)); "duct-router" => ItemBlock::new(1, true, cost!(Beryllium: 10)); - "overflow-duct" => ControlBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8)); - "underflow-duct" => ControlBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8)); + "overflow-duct" => SimpleDuctBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8)); + "underflow-duct" => SimpleDuctBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8)); "duct-bridge" => BridgeBlock::new(1, true, cost!(Beryllium: 20), 3, true); "duct-unloader" => ItemBlock::new(1, true, cost!(Graphite: 20, Silicon: 20, Tungsten: 10)); "surge-conveyor" => ControlBlock::new(1, false, cost!(SurgeAlloy: 1, Tungsten: 1)); @@ -131,31 +152,64 @@ impl BlockLogic for ItemBlock { fn draw( &self, - category: &str, + _: &str, name: &str, state: Option<&State>, - _: Option<&RenderingContext>, + ctx: Option<&RenderingContext>, ) -> Option<ImageHolder> { - if !matches!( + let mut p = load( + match name { + "unloader" => "storage", + "duct-router" | "duct-unloader" => "distribution/ducts", + _ => "distribution", + }, name, - "unloader" | "item-source" | "sorter" | "inverted-sorter" - ) { - return None; - } - let mut p = load(category, name).unwrap().clone(); + ) + .unwrap() + .clone(); if let Some(state) = state { if let Some(s) = Self::get_state(state) { - let mut top = load(category, "center").unwrap().clone(); + let mut top = load( + match name { + "unloader" => "storage", + _ => "distribution", + }, + match name { + "unit-cargo-unload-point" => "unit-cargo-unload-point-top", + _ => "center", + }, + ) + .unwrap() + .clone(); p.overlay(top.tint(s.color()), 0, 0); return Some(ImageHolder::from(p)); } } - if name == "unloader" { + if matches!(name, "unloader" | "unit-cargo-unload-point") { return Some(ImageHolder::from(p)); } - let mut null = load("distribution", "cross-full").unwrap().clone(); - null.overlay(&p, 0, 0); - Some(ImageHolder::from(null)) + if matches!(name, "duct-unloader" | "duct-router") { + let mut null = load("distribution/ducts", "top").unwrap().to_owned(); + null.rotate(ctx.unwrap().rotation.rotated(false).count()); + if name == "duct-unloader" { + let mut top = load("distribution/ducts", "duct-unloader-top") + .unwrap() + .to_owned(); + // this rotate call could be omitted if rotation == Right to save a clone + top.rotate(ctx.unwrap().rotation.rotated(false).count()); + null.overlay(&top, 0, 0); + } + p.overlay(&null, 0, 0); + Some(ImageHolder::from(p)) + } else { + let mut null = load("distribution", "cross-full").unwrap().clone(); + null.overlay(&p, 0, 0); + Some(ImageHolder::from(null)) + } + } + + fn want_context(&self) -> bool { + true } } |