mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/units.rs')
-rw-r--r--src/block/units.rs134
1 files changed, 59 insertions, 75 deletions
diff --git a/src/block/units.rs b/src/block/units.rs
index fa31095..dcd15de 100644
--- a/src/block/units.rs
+++ b/src/block/units.rs
@@ -33,40 +33,33 @@ use crate::unit;
// )
// }
-make_simple!(ConstructorBlock, |me: &Self,
- name,
- _,
- _,
- rot: Rotation,
- s| {
- let mut base = load(name, s);
+make_simple!(ConstructorBlock, |_, name, _, _, rot: Rotation, s| {
+ let mut base = load!(from name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator" | "tank-assembler" | "ship-assembler" | "mech-assembler"], s);
let times = rot.rotated(false).count();
if !name.contains("assembler") {
- let mut out = load(
- &match name {
- "additive-reconstructor"
- | "multiplicative-reconstructor"
- | "exponential-reconstructor"
- | "tetrative-reconstructor" => format!("factory-out-{}", me.size),
- _ => format!("factory-out-{}-dark", me.size),
- },
- s,
- );
- out.rotate(times);
- base.overlay(&out);
+ let mut out = load!(s -> match name {
+ "additive-reconstructor" => "factory-out-3",
+ "multiplicative-reconstructor" => "factory-out-5",
+ "tank-refabricator" | "mech-refabricator" | "ship-refabricator" =>
+ "factory-out-3-dark",
+ "exponential-reconstructor" => "factory-out-7",
+ "prime-refabricator" | "tank-assembler" | "ship-assembler" | "mech-assembler" =>
+ "factory-out-5-dark",
+ "tetrative-reconstructor" => "factory-out-9",
+ });
+ base.overlay(out.rotate(times));
- let mut input = load(
- &match name {
- "additive-reconstructor"
- | "multiplicative-reconstructor"
- | "exponential-reconstructor"
- | "tetrative-reconstructor" => format!("factory-in-{}", me.size),
- _ => format!("factory-in-{}-dark", me.size),
- },
- s,
- );
- input.rotate(times);
- base.overlay(&input);
+ let mut r#in = load!(s -> match name {
+ "additive-reconstructor" => "factory-in-3",
+ "multiplicative-reconstructor" => "factory-in-5",
+ "tank-refabricator" | "mech-refabricator" | "ship-refabricator" =>
+ "factory-in-3-dark",
+ "exponential-reconstructor" => "factory-in-7",
+ "prime-refabricator" | "tank-assembler" | "ship-assembler" | "mech-assembler" =>
+ "factory-in-5-dark",
+ "tetrative-reconstructor" => "factory-in-9",
+ });
+ base.overlay(r#in.rotate(times));
}
// TODO: the context cross is too small
@@ -89,24 +82,21 @@ make_simple!(ConstructorBlock, |me: &Self,
// }
// }
- base.overlay(&load(&format!("{name}-top"), s));
+ base.overlay(load!(concat top => name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator" | "tank-assembler" | "ship-assembler" | "mech-assembler"], s).borrow());
if matches!(name, "mech-assembler" | "tank-assembler" | "ship-assembler") {
base.overlay(
- load(
- match rot {
- Rotation::Up | Rotation::Right => match name {
- "mech-assembler" => "mech-assembler-side1",
- "tank-assembler" => "tank-assembler-side1",
- _ => "ship-assembler-side1",
- },
- _ => match name {
- "mech-assembler" => "mech-assembler-side2",
- "tank-assembler" => "tank-assembler-side2",
- _ => "ship-assembler-side2",
- },
- },
- s,
- )
+ match rot {
+ Rotation::Up | Rotation::Right => load!(s -> match name {
+ "mech-assembler" => "mech-assembler-side1",
+ "tank-assembler" => "tank-assembler-side1",
+ "ship-assembler" => "ship-assembler-side1",
+ }),
+ _ => load!(s -> match name {
+ "mech-assembler" => "mech-assembler-side2",
+ "tank-assembler" => "tank-assembler-side2",
+ "ship-assembler" => "ship-assembler-side2",
+ }),
+ }
.rotate(times),
);
}
@@ -114,23 +104,20 @@ make_simple!(ConstructorBlock, |me: &Self,
});
make_simple!(UnitRepairTower);
make_simple!(AssemblerModule, |_, _, _, _, rot: Rotation, scl| {
- let mut base = load("basic-assembler-module", scl);
+ let mut base = load!("basic-assembler-module", scl);
base.overlay(
- load(
- match rot {
- Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
- _ => "basic-assembler-module-side2",
- },
- scl,
- )
+ load!(scl -> match rot {
+ Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
+ _ => "basic-assembler-module-side2",
+ })
.rotate(rot.rotated(false).count()),
);
base
});
make_simple!(
RepairTurret => |scl| {
- let mut bot = load("block-2", scl);
- let top = load("repair-turret", scl);
+ let mut bot = load!("block-2", scl);
+ let top = load!("repair-turret", scl);
bot.overlay(&top);
bot
},
@@ -166,7 +153,7 @@ make_register! {
"ship-assembler" => ConstructorBlock::new(5, true, cost!(Carbide: 100, Oxide: 200, Tungsten: 500, Silicon: 800, Thorium: 400));
"mech-assembler" => ConstructorBlock::new(5, true, cost!(Carbide: 200, Thorium: 600, Oxide: 200, Tungsten: 500, Silicon: 900)); // smh collaris
"basic-assembler-module" => AssemblerModule::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block
- "unit-repair-tower" => UnitRepairTower::new(2, true, cost!(Graphite: 90, Silicon: 90, Tungsten: 80));
+ "unit-repair-tower" -> UnitRepairTower::new(2, true, cost!(Graphite: 90, Silicon: 90, Tungsten: 80));
}
@@ -258,25 +245,22 @@ impl BlockLogic for AssemblerBlock {
rot: Rotation,
s: Scale,
) -> ImageHolder {
- let mut base = load(name, s);
- let mut out = load(
- match name {
- "ground-factory" | "air-factory" | "naval-factory" => "factory-out-3",
- _ => "factory-out-3-dark",
- },
- s,
- );
+ let mut base = load!(from name which is ["ground-factory" | "air-factory" | "naval-factory" | "tank-fabricator" | "ship-fabricator" | "mech-fabricator"], s);
+ let mut out = load!(s -> match name {
+ "ground-factory" | "air-factory" | "naval-factory" => "factory-out-3",
+ _ => "factory-out-3-dark",
+ });
out.rotate(rot.rotated(false).count());
base.overlay(&out);
- base.overlay(&load(
- &match name {
- "ground-factory" | "air-factory" | "naval-factory" => {
- format!("factory-top-{}", self.size)
- }
- _ => format!("{name}-top"),
- },
- s,
- ));
+ base.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",
+ })
+ .borrow(),
+ );
base
}