mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/units.rs')
-rw-r--r--src/block/units.rs73
1 files changed, 35 insertions, 38 deletions
diff --git a/src/block/units.rs b/src/block/units.rs
index 1fe0ade..97e3b98 100644
--- a/src/block/units.rs
+++ b/src/block/units.rs
@@ -39,16 +39,18 @@ make_simple!(
|_, name, _, _, rot: Rotation, s| {
let mut base =
load!(from name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s);
- unsafe {
- base.overlay(
- match rot {
- Rotation::Up | Rotation::Right => load!(concat "side1" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s),
- Rotation::Down | Rotation::Left => load!(concat "side2" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s)
+ let mut side = match rot {
+ Rotation::Up | Rotation::Right => {
+ load!(concat "side1" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s)
+ }
+ Rotation::Down | Rotation::Left => {
+ load!(concat "side2" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s)
}
- .rotate(rot.rotated(false).count())
- );
- base.overlay(&load!(concat "top" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s))
};
+ unsafe { side.rotate(rot.rotated(false).count()) };
+ unsafe { base.overlay(&side) };
+ let top = load!(concat "top" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s);
+ unsafe { base.overlay(&top) };
base
},
|_, buff| read_assembler(buff)
@@ -74,15 +76,12 @@ make_simple!(
AssemblerModule,
|_, _, _, _, rot: Rotation, scl| {
let mut base = load!("basic-assembler-module", scl);
- unsafe {
- base.overlay(
- load!(scl -> match rot {
- Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
- _ => "basic-assembler-module-side2",
- })
- .rotate(rot.rotated(false).count()),
- )
- };
+ let mut side = load!(scl -> match rot {
+ Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
+ _ => "basic-assembler-module-side2",
+ });
+ unsafe { side.rotate(rot.rotated(false).count()) };
+ unsafe { base.overlay(&side) };
base
},
|_, buff| read_payload_block(buff)
@@ -160,7 +159,8 @@ impl BlockLogic for ConstructorBlock {
"prime-refabricator" => "factory-out-5-dark",
"tetrative-reconstructor" => "factory-out-9",
});
- unsafe { base.overlay(out.rotate(times)) };
+ unsafe { out.rotate(times) };
+ unsafe { base.overlay(&out) };
let mut r#in = load!(s -> match name {
"additive-reconstructor" => "factory-in-3",
@@ -171,7 +171,8 @@ impl BlockLogic for ConstructorBlock {
"prime-refabricator" => "factory-in-5-dark",
"tetrative-reconstructor" => "factory-in-9",
});
- unsafe { base.overlay(r#in.rotate(times)) };
+ unsafe { r#in.rotate(times) };
+ unsafe { base.overlay(&r#in) };
// TODO: the context cross is too small
// for i in 0..4u8 {
@@ -192,10 +193,8 @@ impl BlockLogic for ConstructorBlock {
// }
// }
// }
-
- unsafe {
- base.overlay(&load!(concat "top" => name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator"], s))
- };
+ let top = load!(concat "top" => name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator"], s);
+ unsafe { base.overlay(&top) };
base
}
@@ -297,21 +296,19 @@ impl BlockLogic for UnitFactory {
s: Scale,
) -> ImageHolder<4> {
let mut base = load!(from name which is ["ground-factory" | "air-factory" | "naval-factory" | "tank-fabricator" | "ship-fabricator" | "mech-fabricator"], s);
- unsafe {
- base.overlay(
- load!(s -> match name {
- "ground-factory" | "air-factory" | "naval-factory" => "factory-out-3",
- _ => "factory-out-3-dark",
- })
- .rotate(rot.rotated(false).count()),
- )
- .overlay(&load!(s -> match name {
- "ground-factory" | "air-factory" | "naval-factory" => "factory-top-3",
- "tank-fabricator" => "tank-fabricator-top",
- "ship-fabricator" => "ship-fabricator-top",
- "mech-fabricator" => "mech-fabricator-top",
- }))
- };
+ let mut out = load!(s -> match name {
+ "ground-factory" | "air-factory" | "naval-factory" => "factory-out-3",
+ _ => "factory-out-3-dark",
+ });
+ unsafe { out.rotate(rot.rotated(false).count()) };
+ unsafe { base.overlay(&out) };
+ let top = load!(s -> match name {
+ "ground-factory" | "air-factory" | "naval-factory" => "factory-top-3",
+ "tank-fabricator" => "tank-fabricator-top",
+ "ship-fabricator" => "ship-fabricator-top",
+ "mech-fabricator" => "mech-fabricator-top",
+ });
+ unsafe { base.overlay(&top) };
base
}