mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/payload.rs')
| -rw-r--r-- | src/block/payload.rs | 96 |
1 files changed, 91 insertions, 5 deletions
diff --git a/src/block/payload.rs b/src/block/payload.rs index c9961a1..e20aae9 100644 --- a/src/block/payload.rs +++ b/src/block/payload.rs @@ -12,15 +12,62 @@ use crate::unit; use super::BlockRegistry; -make_simple!(SimplePayloadBlock); -make_simple!(PayloadConveyor => read_payload_conveyor); +make_simple!(SimplePayloadBlock, |_, n, _, _, r: Rotation, scl| { + match n { + "deconstructor" | "small-deconstructor" | "payload-void" => { + let mut base = load(n, scl); + let mut r#in = load( + match n { + "small-deconstructor" => "factory-in-3", + _ => "factory-in-5", + }, + scl, + ); + base.overlay(r#in.rotate(r.rotated(false).count())) + .overlay(&load( + match n { + "small-deconstructor" => "small-deconstructor-top", + "deconstructor" => "deconstructor-top", + _ => "payload-void-top", + }, + scl, + )); + base + } + // "payload-loader" | "payload-unloader" + _ => { + let mut base = load(n, scl); + let mut input = load("factory-in-3-dark", scl); + let mut output = load("factory-out-3-dark", scl); + base.overlay(input.rotate(r.rotated(false).count())) + .overlay(output.rotate(r.rotated(false).count())) + .overlay(&load( + match n { + "payload-loader" => "payload-loader-top", + _ => "payload-unloader-top", + }, + scl, + )); + base + } + } +}); +make_simple!( + PayloadConveyor, + |_, n, _, _, r: Rotation, s| { + let mut base = load(n, s); + base.rotate(r.rotated(false).count()); + base + }, + read_payload_conveyor +); // make_simple!(PayloadRouter => read_payload_router); make_register! { "payload-conveyor" => PayloadConveyor::new(3, false, cost!(Copper: 10, Graphite: 10)); "payload-router" => PayloadBlock::new(3, false, cost!(Copper: 10, Graphite: 15)); "reinforced-payload-conveyor" => PayloadConveyor::new(3, false, cost!(Tungsten: 10)); - "reinforced-payload-router" => SimplePayloadBlock::new(3, false, cost!(Tungsten: 15)); + "reinforced-payload-router" => PayloadBlock::new(3, false, cost!(Tungsten: 15)); "payload-mass-driver" => BridgeBlock::new(3, true, cost!(Tungsten: 120, Silicon: 120, Graphite: 50), 700, false); "large-payload-mass-driver" => BridgeBlock::new(5, true, cost!(Thorium: 200, Tungsten: 200, Silicon: 200, Graphite: 100, Oxide: 30), 1100, false); "small-deconstructor" => SimplePayloadBlock::new(3, true, cost!(Beryllium: 100, Silicon: 100, Oxide: 40, Graphite: 80)); @@ -71,10 +118,49 @@ impl BlockLogic for PayloadBlock { name: &str, _: Option<&State>, _: Option<&RenderingContext>, - _: Rotation, + r: Rotation, s: Scale, ) -> ImageHolder { - read(name, self.size, s) + match name { + "payload-router" | "reinforced-payload-router" => { + let mut base = load(name, s); + base.rotate(r.rotated(false).count()); + let over = load( + match name { + "payload-router" => "payload-router-over", + _ => "reinforced-payload-router-over", + }, + s, + ); + base.overlay(&over); + base + } + // "constructor" | "large-constructor" | "payload-source" + _ => { + let mut base = load(name, s); + let mut out = load( + match name { + "constructor" => "factory-out-3", + "large-constructor" => "factory-out-5-dark", + _ => "factory-out-5", + }, + s, + ); + out.rotate(r.rotated(false).count()); + base.overlay(&out); + + base.overlay(&load( + match name { + "constructor" => "constructor-top", + "large-constructor" => "large-constructor-top", + _ => "payload-source-top", + }, + s, + )); + + base + } + } } fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> { |