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