mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/distribution.rs')
-rw-r--r--src/block/distribution.rs56
1 files changed, 32 insertions, 24 deletions
diff --git a/src/block/distribution.rs b/src/block/distribution.rs
index 090eecd..67c473e 100644
--- a/src/block/distribution.rs
+++ b/src/block/distribution.rs
@@ -41,9 +41,12 @@ make_simple!(JunctionBlock => |_, _, _, buff| { read_directional_item_buffer(buf
make_simple!(SimpleDuctBlock, |_, name, _, _, rot: Rotation, s| {
let mut base = load!("duct-base", s);
let mut top = load!(from name which is ["overflow-duct" "underflow-duct"], s);
- // SAFETY: any load() is square
- unsafe { top.rotate(rot.rotated(false).count()) };
- base.overlay(&top);
+ unsafe {
+ // SAFETY: any load() is square
+ top.rotate(rot.rotated(false).count());
+ // SAFETY: same size
+ base.overlay(&top);
+ }
base
});
@@ -71,7 +74,7 @@ fn draw_stack(
if i == skip {
continue;
}
- to.overlay(&edge(i));
+ unsafe { to.overlay(&edge(i)) };
}
};
let gimme = |n: u8| match n {
@@ -104,7 +107,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) {
- base.overlay(&edge(r));
+ unsafe { base.overlay(&edge(r)) };
}
}
base
@@ -120,14 +123,11 @@ make_simple!(
|_, _, _, buff: &mut DataRead| buff.skip(8),
true
);
-make_simple!(
- SurgeRouter
- / |s| {
- let mut base = load!("surge-router", s);
- base.overlay(&load!("top", s));
- base
- }
-);
+make_simple!(SurgeRouter, |_, _, _, _, r: Rotation, s| {
+ let mut base = load!("surge-router", s);
+ unsafe { base.overlay(load!("top", s).rotate(r.rotated(false).count())) };
+ base
+});
// format: id: [`i32`]
make_simple!(UnitCargoLoader => |_, _, _, buff: &mut DataRead| buff.skip(4));
@@ -235,7 +235,7 @@ impl BlockLogic for ItemBlock {
"unloader" => "unloader-center",
_ => "center",
});
- p.overlay(top.tint(item.color()));
+ unsafe { p.overlay(top.tint(item.color())) };
return p;
}
}
@@ -244,20 +244,26 @@ impl BlockLogic for ItemBlock {
}
if name == "duct-router" {
let mut arrow = load!("top", s);
- unsafe { arrow.rotate(rot.rotated(false).count()) };
- p.overlay(&arrow);
+ unsafe {
+ arrow.rotate(rot.rotated(false).count());
+ p.overlay(&arrow);
+ }
p
} else if name == "duct-unloader" {
let mut top = load!("duct-unloader-top", s);
- unsafe { top.rotate(rot.rotated(false).count()) };
- p.overlay(&top);
+ unsafe {
+ top.rotate(rot.rotated(false).count());
+ p.overlay(&top);
+ }
let mut arrow = load!("duct-unloader-arrow", s);
- unsafe { arrow.rotate(rot.rotated(false).count()) };
- p.overlay(&arrow);
+ unsafe {
+ arrow.rotate(rot.rotated(false).count());
+ p.overlay(&arrow);
+ }
p
} else {
let mut null = load!("cross-full", s);
- null.overlay(&p);
+ unsafe { null.overlay(&p) };
null
}
}
@@ -480,7 +486,7 @@ impl BlockLogic for BridgeBlock {
match name {
"mass-driver" => {
let mut base = load!("mass-driver-base", s);
- base.overlay(&load!("mass-driver", s));
+ unsafe { base.overlay(&load!("mass-driver", s)) };
base
}
"duct-bridge" | "reinforced-bridge-conduit" => {
@@ -492,8 +498,10 @@ impl BlockLogic for BridgeBlock {
_ => "reinforced-bridge-conduit-dir",
}
);
- unsafe { arrow.rotate(r.rotated(false).count()) };
- base.overlay(&arrow);
+ unsafe {
+ arrow.rotate(r.rotated(false).count());
+ base.overlay(&arrow)
+ };
base
}
// "bridge-conveyor" | "phase-conveyor" | "bridge-conduit" | "phase-conduit" | "payload-mass-driver" | "large-payload-mass-driver"