mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/units.rs')
| -rw-r--r-- | src/block/units.rs | 73 |
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 } |