mindustry logic execution, map- and schematic- parsing and rendering
-rw-r--r--Cargo.toml4
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.pngbin178 -> 166 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.pngbin1653 -> 1641 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.pngbin1687 -> 1678 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.pngbin640 -> 567 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.pngbin1435 -> 1374 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor.pngbin636 -> 0 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-0.pngbin312 -> 200 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-1.pngbin687 -> 579 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-2.pngbin706 -> 0 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.pngbin591 -> 546 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.pngbin244 -> 191 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor.pngbin668 -> 0 bytes
-rw-r--r--src/block/distribution.rs73
-rw-r--r--src/block/mod.rs12
15 files changed, 85 insertions, 4 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 0373d89..264692b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,8 +1,8 @@
[package]
name = "mindus"
-version = "1.3.2"
+version = "1.3.3"
edition = "2021"
-description = "A library for working with mindustry data formats (eg schematics) (fork of plandustry)"
+description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)"
authors = [
"KosmosPrime <[email protected]>",
"bend-n <[email protected]>",
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png
index f4d50a7..566bdbf 100644
--- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png
index 7a44bfb..73925cf 100644
--- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png
index bba8997..5c0272b 100644
--- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.png
index 5041f02..7057c6c 100644
--- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.png
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png
index 8cd2516..13e4d79 100644
--- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor.png
deleted file mode 100644
index 3f5fbf0..0000000
--- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png
index 7217e22..bc0f58d 100644
--- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png
index ef69e26..3f3cf2d 100644
--- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-2.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-2.png
deleted file mode 100644
index 3c1afe0..0000000
--- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-2.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.png
index 8144b95..b77c6b0 100644
--- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.png
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png
index d953c79..b84156b 100644
--- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor.png
deleted file mode 100644
index 10a38a7..0000000
--- a/assets/blocks/distribution/stack-conveyors/surge-conveyor.png
+++ /dev/null
Binary files differ
diff --git a/src/block/distribution.rs b/src/block/distribution.rs
index c569328..08df5de 100644
--- a/src/block/distribution.rs
+++ b/src/block/distribution.rs
@@ -55,12 +55,81 @@ make_simple!(
},
true
);
+
+fn draw_stack(
+ _: &StackConveyor,
+ _: &str,
+ name: &str,
+ _: Option<&State>,
+ ctx: Option<&RenderingContext>,
+) -> Option<ImageHolder> {
+ let ctx = ctx.unwrap();
+ let mask = mask(ctx, name);
+ // clone to not hold lock
+ let edge = load("distribution/stack-conveyors", &format!("{name}-edge"))
+ .unwrap()
+ .clone();
+ let edgify = |skip, to: &mut RgbaImage| {
+ for i in 0..4 {
+ if i == skip {
+ continue;
+ }
+ let mut edge = edge.clone();
+ edge.rotate(i);
+ to.overlay(&edge, 0, 0);
+ }
+ };
+ let gimme = |n: u8| {
+ load("distribution/stack-conveyors", &format!("{name}-{n}"))
+ .unwrap()
+ .clone()
+ };
+ let empty = ctx.cross[ctx.rotation.count() as usize].map_or(true, |(v, _)| v.name != name);
+ // mindustry says fuck this and just draws the arrow convs in schems but im better than that
+ Some(ImageHolder::from(
+ if ctx.rotation.mirrored(true, true).mask() == mask && empty && name != "surge-conveyor" {
+ // end
+ let mut base = gimme(2);
+ edgify(
+ ctx.rotation.mirrored(true, true).rotated(false).count(),
+ &mut base,
+ );
+ base
+ } else if mask == B0000 && empty {
+ // single
+ let mut base = gimme(0);
+ base.rotate(ctx.rotation.rotated(false).count());
+ edgify(5, &mut base);
+ base
+ } else if mask == B0000 {
+ // input
+ let mut base = gimme(1);
+ edgify(ctx.rotation.rotated(false).count(), &mut base);
+ base
+ } else {
+ // directional
+ let mut base = gimme(0);
+ let going = ctx.rotation.rotated(false).count();
+ base.rotate(going);
+ for [r, i] in [[3, 0b1000], [0, 0b0100], [1, 0b0010], [2, 0b0001]] {
+ if (mask.into_u8() & i) == 0 && (going != r || empty) {
+ let mut edge = edge.clone();
+ edge.rotate(r);
+ base.overlay(&edge, 0, 0);
+ }
+ }
+ base
+ },
+ ))
+}
+
+make_simple!(StackConveyor, draw_stack, true);
make_simple!(ControlBlock);
make_register! {
"conveyor" => ConveyorBlock::new(1, false, cost!(Copper: 1));
"titanium-conveyor" => ConveyorBlock::new(1, false, cost!(Copper: 1, Lead: 1, Titanium: 1));
- "plastanium-conveyor" => ControlBlock::new(1, false, cost!(Graphite: 1, Silicon: 1, Plastanium: 1));
+ "plastanium-conveyor" => StackConveyor::new(1, false, cost!(Graphite: 1, Silicon: 1, Plastanium: 1));
"armored-conveyor" => ConveyorBlock::new(1, false, cost!(Metaglass: 1, Thorium: 1, Plastanium: 1));
"junction" => JunctionBlock::new(1, true, cost!(Copper: 2));
"bridge-conveyor" => BridgeBlock::new(1, false, cost!(Copper: 6, Lead: 6), 4, true);
@@ -79,7 +148,7 @@ make_register! {
"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));
+ "surge-conveyor" => StackConveyor::new(1, false, cost!(SurgeAlloy: 1, Tungsten: 1));
"surge-router" => ControlBlock::new(1, false, cost!(SurgeAlloy: 5, Tungsten: 1)); // not symmetric
"unit-cargo-loader" => ControlBlock::new(3, true, cost!(Silicon: 80, SurgeAlloy: 50, Oxide: 20));
"unit-cargo-unload-point" => ItemBlock::new(2, true, cost!(Silicon: 60, Tungsten: 60));
diff --git a/src/block/mod.rs b/src/block/mod.rs
index ddfa58b..da52426 100644
--- a/src/block/mod.rs
+++ b/src/block/mod.rs
@@ -3,6 +3,7 @@
//! categorized as mindustry categorizes them in its assets folder, for easy drawing.
//!
//! with the exception of sandbox, that is.
+use bobbin_bits::U4::{self, *};
use std::any::Any;
use std::borrow::Cow;
use std::error::Error;
@@ -307,6 +308,17 @@ impl Rotation {
}
#[must_use]
+ /// mask
+ pub fn mask(self) -> U4 {
+ match self {
+ Rotation::Up => B1000,
+ Rotation::Right => B0100,
+ Rotation::Down => B0010,
+ Rotation::Left => B0001,
+ }
+ }
+
+ #[must_use]
/// character of this rot (Right => >, Up => ^, Left => <, Down => v)
pub fn ch(self) -> char {
match self {