mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/units.rs')
| -rw-r--r-- | src/block/units.rs | 104 |
1 files changed, 71 insertions, 33 deletions
diff --git a/src/block/units.rs b/src/block/units.rs index 536446a..fa31095 100644 --- a/src/block/units.rs +++ b/src/block/units.rs @@ -41,32 +41,33 @@ make_simple!(ConstructorBlock, |me: &Self, s| { let mut base = load(name, 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( - &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 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 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); + } // TODO: the context cross is too small // for i in 0..4u8 { @@ -90,16 +91,53 @@ make_simple!(ConstructorBlock, |me: &Self, base.overlay(&load(&format!("{name}-top"), s)); if matches!(name, "mech-assembler" | "tank-assembler" | "ship-assembler") { - let mut side = load(&format!("{name}-side"), s); - side.rotate(times); - base.overlay(&side); + 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, + ) + .rotate(times), + ); } base }); -make_simple!(UnitBlock); -make_simple!(RepairTurret => |_, _, _, buff: &mut DataRead| { - buff.skip(4) // rotation: [`f32`] +make_simple!(UnitRepairTower); +make_simple!(AssemblerModule, |_, _, _, _, rot: Rotation, 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, + ) + .rotate(rot.rotated(false).count()), + ); + base }); +make_simple!( + RepairTurret => |scl| { + let mut bot = load("block-2", scl); + let top = load("repair-turret", scl); + bot.overlay(&top); + bot + }, + |_, _, _, buff: &mut DataRead| { + buff.skip(4) // rotation: [`f32`] + } +); const GROUND_UNITS: &[unit::Type] = &[unit::Type::Dagger, unit::Type::Crawler, unit::Type::Nova]; const AIR_UNITS: &[unit::Type] = &[unit::Type::Flare, unit::Type::Mono]; @@ -127,8 +165,8 @@ make_register! { "tank-assembler" => ConstructorBlock::new(5, true, cost!(Thorium: 500, Oxide: 150, Carbide: 80, Silicon: 500)); "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" => UnitBlock::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block - "unit-repair-tower" => UnitBlock::new(2, true, cost!(Graphite: 90, Silicon: 90, Tungsten: 80)); + "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)); } |