mindustry logic execution, map- and schematic- parsing and rendering
dont allocate in draw_stack
bendn 2023-08-13
parent e7c8167 · commit 4374f6d
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png (renamed from assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.png)bin567 -> 567 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.pngbin0 -> 1120 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.pngbin0 -> 1127 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.pngbin0 -> 1120 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png (renamed from assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.png)bin545 -> 545 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.pngbin0 -> 1100 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.pngbin0 -> 1105 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.pngbin0 -> 1110 bytes
-rw-r--r--src/block/distribution.rs29
9 files changed, 15 insertions, 14 deletions
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png
index 7057c6c..7057c6c 100644
--- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge.png
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png
new file mode 100644
index 0000000..cc9890d
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png
new file mode 100644
index 0000000..0abdfc5
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png
new file mode 100644
index 0000000..34924be
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png
index 5ef6959..5ef6959 100644
--- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge.png
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png
new file mode 100644
index 0000000..ccc72e5
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png
new file mode 100644
index 0000000..05d6385
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png
new file mode 100644
index 0000000..8ae4559
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png
Binary files differ
diff --git a/src/block/distribution.rs b/src/block/distribution.rs
index e620d8a..090eecd 100644
--- a/src/block/distribution.rs
+++ b/src/block/distribution.rs
@@ -57,15 +57,21 @@ fn draw_stack(
) -> ImageHolder<4> {
let ctx = ctx.unwrap();
let mask = mask(ctx, rot, name);
- let edge = load!(concat "edge" => name which is ["surge-conveyor" | "plastanium-conveyor"], s);
- let edgify = |skip, to: &mut Image<&mut [u8], 4>| {
+ #[rustfmt::skip]
+ let edge = |n: u8| {
+ match n {
+ 0 => load!(concat "edge-0" => name which is ["surge-conveyor" | "plastanium-conveyor"], s),
+ 1 => load!(concat "edge-1" => name which is ["surge-conveyor" | "plastanium-conveyor"], s),
+ 2 => load!(concat "edge-2" => name which is ["surge-conveyor" | "plastanium-conveyor"], s),
+ _ => load!(concat "edge-3" => name which is ["surge-conveyor" | "plastanium-conveyor"], s)
+ }
+ };
+ let edgify = |skip, to: &mut ImageHolder<4>| {
for i in 0..4 {
if i == skip {
continue;
}
- let mut edge = edge.clone();
- unsafe { edge.rotate(i) };
- to.overlay(&edge.borrow());
+ to.overlay(&edge(i));
}
};
let gimme = |n: u8| match n {
@@ -78,21 +84,18 @@ fn draw_stack(
if rot.mirrored(true, true).mask() == mask && empty && name != "surge-conveyor" {
// end
let mut base = gimme(2);
- edgify(
- rot.mirrored(true, true).rotated(false).count(),
- &mut base.borrow_mut(),
- );
+ edgify(rot.mirrored(true, true).rotated(false).count(), &mut base);
base
} else if mask == B0000 && empty {
// single
let mut base = gimme(0);
unsafe { base.rotate(rot.rotated(false).count()) };
- edgify(5, &mut base.borrow_mut());
+ edgify(5, &mut base);
base
} else if mask == B0000 {
// input
let mut base = gimme(1);
- edgify(rot.rotated(false).count(), &mut base.borrow_mut());
+ edgify(rot.rotated(false).count(), &mut base);
base
} else {
// directional
@@ -101,9 +104,7 @@ fn draw_stack(
unsafe { 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();
- unsafe { edge.rotate(r) };
- base.overlay(&edge);
+ base.overlay(&edge(r));
}
}
base