mindustry logic execution, map- and schematic- parsing and rendering
-rw-r--r--Cargo.toml2
-rw-r--r--assets/blocks/payload/factory-top-5.pngbin1417 -> 0 bytes
-rw-r--r--assets/blocks/units/additive-reconstructor-top.pngbin876 -> 807 bytes
-rw-r--r--assets/blocks/units/additive-reconstructor.pngbin845 -> 749 bytes
-rw-r--r--assets/blocks/units/air-factory.pngbin842 -> 766 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module-side.pngbin0 -> 561 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module-side1.pngbin651 -> 0 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module-side2.pngbin675 -> 0 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module-top.pngbin129 -> 0 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module.pngbin1672 -> 1515 bytes
-rw-r--r--assets/blocks/units/exponential-reconstructor-top.pngbin1935 -> 1745 bytes
-rw-r--r--assets/blocks/units/exponential-reconstructor.pngbin2645 -> 2353 bytes
-rw-r--r--assets/blocks/units/ground-factory.pngbin842 -> 766 bytes
-rw-r--r--assets/blocks/units/mech-assembler-side.pngbin0 -> 504 bytes
-rw-r--r--assets/blocks/units/mech-assembler-side1.pngbin579 -> 0 bytes
-rw-r--r--assets/blocks/units/mech-assembler-side2.pngbin579 -> 0 bytes
-rw-r--r--assets/blocks/units/mech-assembler-top.pngbin1780 -> 1607 bytes
-rw-r--r--assets/blocks/units/mech-assembler.pngbin1535 -> 1443 bytes
-rw-r--r--assets/blocks/units/mech-fabricator-top.pngbin948 -> 848 bytes
-rw-r--r--assets/blocks/units/mech-fabricator.pngbin966 -> 872 bytes
-rw-r--r--assets/blocks/units/mech-refabricator-top.pngbin1084 -> 968 bytes
-rw-r--r--assets/blocks/units/mech-refabricator.pngbin823 -> 729 bytes
-rw-r--r--assets/blocks/units/multiplicative-reconstructor-top.pngbin1417 -> 1240 bytes
-rw-r--r--assets/blocks/units/multiplicative-reconstructor.pngbin1605 -> 1432 bytes
-rw-r--r--assets/blocks/units/naval-factory.pngbin842 -> 762 bytes
-rw-r--r--assets/blocks/units/prime-refabricator-top.pngbin1912 -> 1723 bytes
-rw-r--r--assets/blocks/units/prime-refabricator.pngbin1632 -> 1464 bytes
-rw-r--r--assets/blocks/units/repair-point-base.pngbin253 -> 203 bytes
-rw-r--r--assets/blocks/units/repair-point.pngbin343 -> 238 bytes
-rw-r--r--assets/blocks/units/repair-turret.pngbin765 -> 678 bytes
-rw-r--r--assets/blocks/units/ship-assembler-side.pngbin0 -> 504 bytes
-rw-r--r--assets/blocks/units/ship-assembler-side1.pngbin579 -> 0 bytes
-rw-r--r--assets/blocks/units/ship-assembler-side2.pngbin579 -> 0 bytes
-rw-r--r--assets/blocks/units/ship-assembler-top.pngbin1780 -> 1608 bytes
-rw-r--r--assets/blocks/units/ship-assembler.pngbin1535 -> 1443 bytes
-rw-r--r--assets/blocks/units/ship-fabricator-top.pngbin948 -> 849 bytes
-rw-r--r--assets/blocks/units/ship-fabricator.pngbin966 -> 872 bytes
-rw-r--r--assets/blocks/units/ship-refabricator-top.pngbin1084 -> 967 bytes
-rw-r--r--assets/blocks/units/ship-refabricator.pngbin823 -> 729 bytes
-rw-r--r--assets/blocks/units/tank-assembler-side.pngbin0 -> 504 bytes
-rw-r--r--assets/blocks/units/tank-assembler-side1.pngbin579 -> 0 bytes
-rw-r--r--assets/blocks/units/tank-assembler-side2.pngbin579 -> 0 bytes
-rw-r--r--assets/blocks/units/tank-assembler-top.pngbin1780 -> 1607 bytes
-rw-r--r--assets/blocks/units/tank-assembler.pngbin1535 -> 1443 bytes
-rw-r--r--assets/blocks/units/tank-fabricator-top.pngbin948 -> 848 bytes
-rw-r--r--assets/blocks/units/tank-fabricator.pngbin966 -> 872 bytes
-rw-r--r--assets/blocks/units/tank-refabricator-top.pngbin1084 -> 968 bytes
-rw-r--r--assets/blocks/units/tank-refabricator.pngbin823 -> 729 bytes
-rw-r--r--assets/blocks/units/tetrative-reconstructor-top.pngbin2472 -> 2221 bytes
-rw-r--r--assets/blocks/units/tetrative-reconstructor.pngbin4694 -> 4025 bytes
-rw-r--r--assets/blocks/units/unit-cargo-loader.pngbin1174 -> 1055 bytes
-rw-r--r--assets/blocks/units/unit-repair-tower-glow.pngbin1313 -> 0 bytes
-rw-r--r--assets/blocks/units/unit-repair-tower.pngbin843 -> 761 bytes
-rw-r--r--src/block/units.rs170
-rw-r--r--src/data/renderer.rs4
55 files changed, 164 insertions, 12 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 87c9c3a..0373d89 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "mindus"
-version = "1.3.1"
+version = "1.3.2"
edition = "2021"
description = "A library for working with mindustry data formats (eg schematics) (fork of plandustry)"
authors = [
diff --git a/assets/blocks/payload/factory-top-5.png b/assets/blocks/payload/factory-top-5.png
deleted file mode 100644
index d6e51b4..0000000
--- a/assets/blocks/payload/factory-top-5.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/additive-reconstructor-top.png b/assets/blocks/units/additive-reconstructor-top.png
index 72f787f..235e672 100644
--- a/assets/blocks/units/additive-reconstructor-top.png
+++ b/assets/blocks/units/additive-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/additive-reconstructor.png b/assets/blocks/units/additive-reconstructor.png
index c40e27c..fbc893b 100644
--- a/assets/blocks/units/additive-reconstructor.png
+++ b/assets/blocks/units/additive-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/air-factory.png b/assets/blocks/units/air-factory.png
index a6267de..0644c21 100644
--- a/assets/blocks/units/air-factory.png
+++ b/assets/blocks/units/air-factory.png
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module-side.png b/assets/blocks/units/basic-assembler-module-side.png
new file mode 100644
index 0000000..a621bee
--- /dev/null
+++ b/assets/blocks/units/basic-assembler-module-side.png
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module-side1.png b/assets/blocks/units/basic-assembler-module-side1.png
deleted file mode 100644
index 6972683..0000000
--- a/assets/blocks/units/basic-assembler-module-side1.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module-side2.png b/assets/blocks/units/basic-assembler-module-side2.png
deleted file mode 100644
index 1684852..0000000
--- a/assets/blocks/units/basic-assembler-module-side2.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module-top.png b/assets/blocks/units/basic-assembler-module-top.png
deleted file mode 100644
index c8335d4..0000000
--- a/assets/blocks/units/basic-assembler-module-top.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module.png b/assets/blocks/units/basic-assembler-module.png
index 925ae31..328c982 100644
--- a/assets/blocks/units/basic-assembler-module.png
+++ b/assets/blocks/units/basic-assembler-module.png
Binary files differ
diff --git a/assets/blocks/units/exponential-reconstructor-top.png b/assets/blocks/units/exponential-reconstructor-top.png
index 4323e74..fb14b35 100644
--- a/assets/blocks/units/exponential-reconstructor-top.png
+++ b/assets/blocks/units/exponential-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/exponential-reconstructor.png b/assets/blocks/units/exponential-reconstructor.png
index 9d39a51..d448f39 100644
--- a/assets/blocks/units/exponential-reconstructor.png
+++ b/assets/blocks/units/exponential-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/ground-factory.png b/assets/blocks/units/ground-factory.png
index 7a1106c..4897ec4 100644
--- a/assets/blocks/units/ground-factory.png
+++ b/assets/blocks/units/ground-factory.png
Binary files differ
diff --git a/assets/blocks/units/mech-assembler-side.png b/assets/blocks/units/mech-assembler-side.png
new file mode 100644
index 0000000..128573a
--- /dev/null
+++ b/assets/blocks/units/mech-assembler-side.png
Binary files differ
diff --git a/assets/blocks/units/mech-assembler-side1.png b/assets/blocks/units/mech-assembler-side1.png
deleted file mode 100644
index a65aedb..0000000
--- a/assets/blocks/units/mech-assembler-side1.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/mech-assembler-side2.png b/assets/blocks/units/mech-assembler-side2.png
deleted file mode 100644
index baec10a..0000000
--- a/assets/blocks/units/mech-assembler-side2.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/mech-assembler-top.png b/assets/blocks/units/mech-assembler-top.png
index 6e5e2b7..eaeb699 100644
--- a/assets/blocks/units/mech-assembler-top.png
+++ b/assets/blocks/units/mech-assembler-top.png
Binary files differ
diff --git a/assets/blocks/units/mech-assembler.png b/assets/blocks/units/mech-assembler.png
index 04b7308..d49f5a2 100644
--- a/assets/blocks/units/mech-assembler.png
+++ b/assets/blocks/units/mech-assembler.png
Binary files differ
diff --git a/assets/blocks/units/mech-fabricator-top.png b/assets/blocks/units/mech-fabricator-top.png
index 57ebfc2..d4e4d62 100644
--- a/assets/blocks/units/mech-fabricator-top.png
+++ b/assets/blocks/units/mech-fabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/mech-fabricator.png b/assets/blocks/units/mech-fabricator.png
index d816c06..2556a96 100644
--- a/assets/blocks/units/mech-fabricator.png
+++ b/assets/blocks/units/mech-fabricator.png
Binary files differ
diff --git a/assets/blocks/units/mech-refabricator-top.png b/assets/blocks/units/mech-refabricator-top.png
index e78d8c2..48446c0 100644
--- a/assets/blocks/units/mech-refabricator-top.png
+++ b/assets/blocks/units/mech-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/mech-refabricator.png b/assets/blocks/units/mech-refabricator.png
index 7ab0cc5..5d89f8f 100644
--- a/assets/blocks/units/mech-refabricator.png
+++ b/assets/blocks/units/mech-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/multiplicative-reconstructor-top.png b/assets/blocks/units/multiplicative-reconstructor-top.png
index 4403825..e319530 100644
--- a/assets/blocks/units/multiplicative-reconstructor-top.png
+++ b/assets/blocks/units/multiplicative-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/multiplicative-reconstructor.png b/assets/blocks/units/multiplicative-reconstructor.png
index 6dcf71c..5ea5f9f 100644
--- a/assets/blocks/units/multiplicative-reconstructor.png
+++ b/assets/blocks/units/multiplicative-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/naval-factory.png b/assets/blocks/units/naval-factory.png
index 052f729..f022ba2 100644
--- a/assets/blocks/units/naval-factory.png
+++ b/assets/blocks/units/naval-factory.png
Binary files differ
diff --git a/assets/blocks/units/prime-refabricator-top.png b/assets/blocks/units/prime-refabricator-top.png
index 1bd25e6..675639a 100644
--- a/assets/blocks/units/prime-refabricator-top.png
+++ b/assets/blocks/units/prime-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/prime-refabricator.png b/assets/blocks/units/prime-refabricator.png
index 05491bd..d48e63c 100644
--- a/assets/blocks/units/prime-refabricator.png
+++ b/assets/blocks/units/prime-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/repair-point-base.png b/assets/blocks/units/repair-point-base.png
index 5cc56cb..d68eb37 100644
--- a/assets/blocks/units/repair-point-base.png
+++ b/assets/blocks/units/repair-point-base.png
Binary files differ
diff --git a/assets/blocks/units/repair-point.png b/assets/blocks/units/repair-point.png
index f3c0a07..9bad782 100644
--- a/assets/blocks/units/repair-point.png
+++ b/assets/blocks/units/repair-point.png
Binary files differ
diff --git a/assets/blocks/units/repair-turret.png b/assets/blocks/units/repair-turret.png
index f62c761..f20f3d7 100644
--- a/assets/blocks/units/repair-turret.png
+++ b/assets/blocks/units/repair-turret.png
Binary files differ
diff --git a/assets/blocks/units/ship-assembler-side.png b/assets/blocks/units/ship-assembler-side.png
new file mode 100644
index 0000000..f865e4d
--- /dev/null
+++ b/assets/blocks/units/ship-assembler-side.png
Binary files differ
diff --git a/assets/blocks/units/ship-assembler-side1.png b/assets/blocks/units/ship-assembler-side1.png
deleted file mode 100644
index 619461a..0000000
--- a/assets/blocks/units/ship-assembler-side1.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/ship-assembler-side2.png b/assets/blocks/units/ship-assembler-side2.png
deleted file mode 100644
index 3a743e8..0000000
--- a/assets/blocks/units/ship-assembler-side2.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/ship-assembler-top.png b/assets/blocks/units/ship-assembler-top.png
index e38503a..c055289 100644
--- a/assets/blocks/units/ship-assembler-top.png
+++ b/assets/blocks/units/ship-assembler-top.png
Binary files differ
diff --git a/assets/blocks/units/ship-assembler.png b/assets/blocks/units/ship-assembler.png
index a1fff21..1617c27 100644
--- a/assets/blocks/units/ship-assembler.png
+++ b/assets/blocks/units/ship-assembler.png
Binary files differ
diff --git a/assets/blocks/units/ship-fabricator-top.png b/assets/blocks/units/ship-fabricator-top.png
index 7c4de4e..b120238 100644
--- a/assets/blocks/units/ship-fabricator-top.png
+++ b/assets/blocks/units/ship-fabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/ship-fabricator.png b/assets/blocks/units/ship-fabricator.png
index 67b5a12..3f02145 100644
--- a/assets/blocks/units/ship-fabricator.png
+++ b/assets/blocks/units/ship-fabricator.png
Binary files differ
diff --git a/assets/blocks/units/ship-refabricator-top.png b/assets/blocks/units/ship-refabricator-top.png
index d003e35..aa8cc85 100644
--- a/assets/blocks/units/ship-refabricator-top.png
+++ b/assets/blocks/units/ship-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/ship-refabricator.png b/assets/blocks/units/ship-refabricator.png
index b8c6ff6..1c921a4 100644
--- a/assets/blocks/units/ship-refabricator.png
+++ b/assets/blocks/units/ship-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/tank-assembler-side.png b/assets/blocks/units/tank-assembler-side.png
new file mode 100644
index 0000000..ee7fee9
--- /dev/null
+++ b/assets/blocks/units/tank-assembler-side.png
Binary files differ
diff --git a/assets/blocks/units/tank-assembler-side1.png b/assets/blocks/units/tank-assembler-side1.png
deleted file mode 100644
index 7c6725f..0000000
--- a/assets/blocks/units/tank-assembler-side1.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/tank-assembler-side2.png b/assets/blocks/units/tank-assembler-side2.png
deleted file mode 100644
index b5689c0..0000000
--- a/assets/blocks/units/tank-assembler-side2.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/tank-assembler-top.png b/assets/blocks/units/tank-assembler-top.png
index 2c8060b..1478f2c 100644
--- a/assets/blocks/units/tank-assembler-top.png
+++ b/assets/blocks/units/tank-assembler-top.png
Binary files differ
diff --git a/assets/blocks/units/tank-assembler.png b/assets/blocks/units/tank-assembler.png
index 3e379f0..74e2017 100644
--- a/assets/blocks/units/tank-assembler.png
+++ b/assets/blocks/units/tank-assembler.png
Binary files differ
diff --git a/assets/blocks/units/tank-fabricator-top.png b/assets/blocks/units/tank-fabricator-top.png
index 09cf0a6..18ef34f 100644
--- a/assets/blocks/units/tank-fabricator-top.png
+++ b/assets/blocks/units/tank-fabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/tank-fabricator.png b/assets/blocks/units/tank-fabricator.png
index e18aff4..91eec5d 100644
--- a/assets/blocks/units/tank-fabricator.png
+++ b/assets/blocks/units/tank-fabricator.png
Binary files differ
diff --git a/assets/blocks/units/tank-refabricator-top.png b/assets/blocks/units/tank-refabricator-top.png
index 458d929..f57933e 100644
--- a/assets/blocks/units/tank-refabricator-top.png
+++ b/assets/blocks/units/tank-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/tank-refabricator.png b/assets/blocks/units/tank-refabricator.png
index 93b606a..3d73664 100644
--- a/assets/blocks/units/tank-refabricator.png
+++ b/assets/blocks/units/tank-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/tetrative-reconstructor-top.png b/assets/blocks/units/tetrative-reconstructor-top.png
index fa72177..9db3308 100644
--- a/assets/blocks/units/tetrative-reconstructor-top.png
+++ b/assets/blocks/units/tetrative-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/tetrative-reconstructor.png b/assets/blocks/units/tetrative-reconstructor.png
index 67f7ed8..391f483 100644
--- a/assets/blocks/units/tetrative-reconstructor.png
+++ b/assets/blocks/units/tetrative-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/unit-cargo-loader.png b/assets/blocks/units/unit-cargo-loader.png
index cd658f8..6b8de38 100644
--- a/assets/blocks/units/unit-cargo-loader.png
+++ b/assets/blocks/units/unit-cargo-loader.png
Binary files differ
diff --git a/assets/blocks/units/unit-repair-tower-glow.png b/assets/blocks/units/unit-repair-tower-glow.png
deleted file mode 100644
index 3234f4a..0000000
--- a/assets/blocks/units/unit-repair-tower-glow.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/unit-repair-tower.png b/assets/blocks/units/unit-repair-tower.png
index 805e1ef..59530d8 100644
--- a/assets/blocks/units/unit-repair-tower.png
+++ b/assets/blocks/units/unit-repair-tower.png
Binary files differ
diff --git a/src/block/units.rs b/src/block/units.rs
index a9d15a4..2dcfc94 100644
--- a/src/block/units.rs
+++ b/src/block/units.rs
@@ -6,7 +6,114 @@ use crate::block::*;
use crate::data::dynamic::DynType;
use crate::unit;
-make_simple!(ConstructorBlock);
+// fn is_pay(b: &str) -> bool {
+// matches!(
+// b,
+// "ground-factory"
+// | "air-factory"
+// | "naval-factory"
+// | "additive-reconstructor"
+// | "multiplicative-reconstructor"
+// | "exponential-reconstructor"
+// | "tank-fabricator"
+// | "ship-fabricator"
+// | "mech-fabricator"
+// | "tank-refabricator"
+// | "ship-refabricator"
+// | "payload-conveyor"
+// | "payload-router"
+// | "reinforced-payload-conveyor"
+// | "reinforced-payload-router"
+// | "payload-mass-driver"
+// | "large-payload-mass-driver"
+// | "constructor"
+// | "large-constructor"
+// | "payload-source"
+// )
+// }
+
+make_simple!(
+ ConstructorBlock,
+ |me: &Self, _, name, _, context: Option<&RenderingContext>| {
+ let ctx = context.unwrap();
+ let mut base = load("units", name).unwrap().to_owned();
+ let times = ctx.rotation.rotated(false).count();
+ {
+ let out = load(
+ "payload",
+ &match name {
+ "additive-reconstructor"
+ | "multiplicative-reconstructor"
+ | "exponential-reconstructor"
+ | "tetrative-reconstructor" => format!("factory-out-{}", me.size),
+ _ => format!("factory-out-{}-dark", me.size),
+ },
+ )
+ .unwrap();
+ if times != 0 {
+ let mut out = out.clone();
+ out.rotate(times);
+ base.overlay(&out, 0, 0);
+ } else {
+ base.overlay(&out, 0, 0);
+ }
+ }
+ {
+ let input = load(
+ "payload",
+ &match name {
+ "additive-reconstructor"
+ | "multiplicative-reconstructor"
+ | "exponential-reconstructor"
+ | "tetrative-reconstructor" => format!("factory-in-{}", me.size),
+ _ => format!("factory-in-{}-dark", me.size),
+ },
+ )
+ .unwrap();
+ if times != 0 {
+ let mut input = input.clone();
+ input.rotate(times);
+ base.overlay(&input, 0, 0);
+ } else {
+ base.overlay(&input, 0, 0);
+ }
+ }
+ // TODO: the context cross is too small
+ // for i in 0..4u8 {
+ // if let Some((b, rot)) = dbg!(ctx.cross[i as usize]) {
+ // if rot.mirrored(true, true) != ctx.rotation && match rot {
+ // Rotation::Up => i == 3,
+ // Rotation::Right => i == 4,
+ // Rotation::Down => i == 0,
+ // Rotation::Left => i == 2,
+ // } && is_pay(b.name())
+ // {
+ // let r = unsafe { std::mem::transmute::<u8, Rotation>(i) }
+ // .mirrored(true, true)
+ // .rotated(false);
+ // let mut input = input.clone();
+ // input.rotate(r.count());
+ // base.overlay(&input, 0, 0);
+ // }
+ // }
+ // }
+ {
+ base.overlay(&load("units", &format!("{name}-top")).unwrap(), 0, 0);
+ }
+ if matches!(name, "mech-assembler" | "tank-assembler" | "ship-assembler") {
+ let side = load("units", &format!("{name}-side")).unwrap();
+ if times != 0 {
+ let mut side = side.clone();
+ side.rotate(times);
+ base.overlay(&side, 0, 0);
+ } else {
+ base.overlay(&side, 0, 0);
+ }
+ }
+ Some(ImageHolder::from(base))
+ },
+ true
+);
make_simple!(UnitBlock);
const GROUND_UNITS: &[unit::Type] = &[unit::Type::Dagger, unit::Type::Crawler, unit::Type::Nova];
@@ -25,9 +132,9 @@ make_register! {
cost!(Lead: 4000, Thorium: 1000, Silicon: 3000, Plastanium: 600, PhaseFabric: 600, SurgeAlloy: 800));
"repair-point" => UnitBlock::new(1, true, cost!(Copper: 30, Lead: 30, Silicon: 20));
"repair-turret" => UnitBlock::new(2, true, cost!(Thorium: 80, Silicon: 90, Plastanium: 60));
- "tank-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 200, Beryllium: 150));
- "ship-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 250, Beryllium: 200));
- "mech-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 200, Graphite: 300, Tungsten: 60));
+ "tank-fabricator" => AssemblerBlock::new(3, true, cost!(Silicon: 200, Beryllium: 150), &[unit::Type::Stell]);
+ "ship-fabricator" => AssemblerBlock::new(3, true, cost!(Silicon: 250, Beryllium: 200), &[unit::Type::Elude]);
+ "mech-fabricator" => AssemblerBlock::new(3, true, cost!(Silicon: 200, Graphite: 300, Tungsten: 60), &[unit::Type::Merui]);
"tank-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 200, Tungsten: 80, Silicon: 100));
"mech-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 250, Tungsten: 120, Silicon: 150));
"ship-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 200, Tungsten: 100, Silicon: 150, Oxide: 40));
@@ -35,7 +142,7 @@ 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" => ConstructorBlock::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block
+ "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));
}
@@ -105,10 +212,6 @@ impl BlockLogic for AssemblerBlock {
Box::new(Self::create_state(*state))
}
- fn mirror_state(&self, _: &mut State, _: bool, _: bool) {}
-
- fn rotate_state(&self, _: &mut State, _: bool) {}
-
fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
if let Some(state) = Self::get_state(state) {
for (i, curr) in self.valid.iter().enumerate() {
@@ -123,6 +226,55 @@ impl BlockLogic for AssemblerBlock {
Ok(DynData::Int(-1))
}
}
+
+ fn draw(
+ &self,
+ _: &str,
+ name: &str,
+ _: Option<&State>,
+ context: Option<&RenderingContext>,
+ ) -> Option<ImageHolder> {
+ let ctx = context.unwrap();
+ let mut base = load("units", name).unwrap().to_owned();
+ let out = load(
+ "payload",
+ match name {
+ "ground-factory" | "air-factory" | "naval-factory" => "factory-out-3",
+ _ => "factory-out-3-dark",
+ },
+ )
+ .unwrap();
+ let times = ctx.rotation.rotated(false).count();
+ if times != 0 {
+ let mut out = out.clone();
+ out.rotate(times);
+ base.overlay(&out, 0, 0);
+ } else {
+ base.overlay(&out, 0, 0);
+ }
+ base.overlay(
+ &load(
+ match name {
+ "ground-factory" | "air-factory" | "naval-factory" => "payload",
+ _ => "units",
+ },
+ &match name {
+ "ground-factory" | "air-factory" | "naval-factory" => {
+ format!("factory-top-{}", self.size)
+ }
+ _ => format!("{name}-top"),
+ },
+ )
+ .unwrap(),
+ 0,
+ 0,
+ );
+ Some(ImageHolder::from(base))
+ }
+
+ fn want_context(&self) -> bool {
+ true
+ }
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
diff --git a/src/data/renderer.rs b/src/data/renderer.rs
index 5290584..58aba9b 100644
--- a/src/data/renderer.rs
+++ b/src/data/renderer.rs
@@ -92,12 +92,12 @@ impl From<RgbaImage> for ImageHolder {
static CACHE: OnceLock<Cache> = OnceLock::new();
pub(crate) fn load(category: &str, name: &str) -> Option<Ref<'static, PathBuf, RgbaImage>> {
- let key = Path::new("blocks").join(category).join(name);
- let mut p = key.clone();
+ let key = Path::new(category).join(name);
use dashmap::mapref::entry::Entry::*;
Some(match cache().entry(key) {
Occupied(v) => v.into_ref().downgrade(),
Vacant(entry) => {
+ let mut p = Path::new("blocks").join(category).join(name);
p.set_extension("png");
let Some(i) = load_raw(p) else {
return None;