mindustry logic execution, map- and schematic- parsing and rendering
-rw-r--r--Cargo.toml2
-rw-r--r--assets/blocks/turrets/afflict.pngbin1569 -> 1913 bytes
-rw-r--r--assets/blocks/turrets/arc.pngbin250 -> 415 bytes
-rw-r--r--assets/blocks/turrets/bases/block-1.pngbin180 -> 0 bytes
-rw-r--r--assets/blocks/turrets/bases/block-2.pngbin314 -> 0 bytes
-rw-r--r--assets/blocks/turrets/bases/block-3.pngbin434 -> 0 bytes
-rw-r--r--assets/blocks/turrets/bases/block-4.pngbin626 -> 0 bytes
-rw-r--r--assets/blocks/turrets/bases/reinforced-block-3.pngbin746 -> 0 bytes
-rw-r--r--assets/blocks/turrets/bases/reinforced-block-4.pngbin1108 -> 0 bytes
-rw-r--r--assets/blocks/turrets/bases/reinforced-block-5.pngbin1387 -> 0 bytes
-rw-r--r--assets/blocks/turrets/breach.pngbin892 -> 1248 bytes
-rw-r--r--assets/blocks/turrets/cyclone.pngbin737 -> 1020 bytes
-rw-r--r--assets/blocks/turrets/diffuse.pngbin1222 -> 1390 bytes
-rw-r--r--assets/blocks/turrets/disperse.pngbin1358 -> 1628 bytes
-rw-r--r--assets/blocks/turrets/duo.pngbin271 -> 419 bytes
-rw-r--r--assets/blocks/turrets/foreshadow.pngbin1201 -> 1506 bytes
-rw-r--r--assets/blocks/turrets/fuse.pngbin1011 -> 1302 bytes
-rw-r--r--assets/blocks/turrets/hail.pngbin265 -> 432 bytes
-rw-r--r--assets/blocks/turrets/lancer.pngbin530 -> 739 bytes
-rw-r--r--assets/blocks/turrets/lustre.pngbin1519 -> 1737 bytes
-rw-r--r--assets/blocks/turrets/malign.pngbin2235 -> 2473 bytes
-rw-r--r--assets/blocks/turrets/meltdown.pngbin1250 -> 1567 bytes
-rw-r--r--assets/blocks/turrets/parallax.pngbin623 -> 717 bytes
-rw-r--r--assets/blocks/turrets/ripple.pngbin806 -> 1051 bytes
-rw-r--r--assets/blocks/turrets/salvo.pngbin563 -> 795 bytes
-rw-r--r--assets/blocks/turrets/scathe.pngbin1557 -> 1636 bytes
-rw-r--r--assets/blocks/turrets/scatter.pngbin479 -> 697 bytes
-rw-r--r--assets/blocks/turrets/scorch.pngbin297 -> 411 bytes
-rw-r--r--assets/blocks/turrets/segment.pngbin609 -> 700 bytes
-rw-r--r--assets/blocks/turrets/smite.pngbin2053 -> 2350 bytes
-rw-r--r--assets/blocks/turrets/spectre.pngbin1146 -> 1511 bytes
-rw-r--r--assets/blocks/turrets/sublimate.pngbin1107 -> 1325 bytes
-rw-r--r--assets/blocks/turrets/swarmer.pngbin681 -> 727 bytes
-rw-r--r--assets/blocks/turrets/titan.pngbin1346 -> 1557 bytes
-rw-r--r--assets/blocks/turrets/tsunami.pngbin876 -> 1144 bytes
-rw-r--r--assets/blocks/turrets/wave.pngbin518 -> 793 bytes
-rw-r--r--assets/blocks/units/repair-point-base.pngbin203 -> 0 bytes
-rw-r--r--assets/blocks/units/repair-point.pngbin238 -> 398 bytes
-rw-r--r--assets/blocks/units/repair-turret.pngbin678 -> 761 bytes
-rw-r--r--src/block/distribution.rs10
-rw-r--r--src/block/logic.rs2
-rw-r--r--src/block/turrets.rs112
-rw-r--r--src/block/units.rs21
-rw-r--r--src/data/renderer.rs21
-rw-r--r--src/utils/image.rs26
45 files changed, 68 insertions, 126 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 69cc73e..96847ea 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "mindus"
-version = "3.0.8"
+version = "4.0.0"
edition = "2021"
description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)"
authors = [
diff --git a/assets/blocks/turrets/afflict.png b/assets/blocks/turrets/afflict.png
index 5f8f18b..7b37826 100644
--- a/assets/blocks/turrets/afflict.png
+++ b/assets/blocks/turrets/afflict.png
Binary files differ
diff --git a/assets/blocks/turrets/arc.png b/assets/blocks/turrets/arc.png
index aa4bf20..be61590 100644
--- a/assets/blocks/turrets/arc.png
+++ b/assets/blocks/turrets/arc.png
Binary files differ
diff --git a/assets/blocks/turrets/bases/block-1.png b/assets/blocks/turrets/bases/block-1.png
deleted file mode 100644
index f3844b5..0000000
--- a/assets/blocks/turrets/bases/block-1.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/turrets/bases/block-2.png b/assets/blocks/turrets/bases/block-2.png
deleted file mode 100644
index e49886f..0000000
--- a/assets/blocks/turrets/bases/block-2.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/turrets/bases/block-3.png b/assets/blocks/turrets/bases/block-3.png
deleted file mode 100644
index f365825..0000000
--- a/assets/blocks/turrets/bases/block-3.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/turrets/bases/block-4.png b/assets/blocks/turrets/bases/block-4.png
deleted file mode 100644
index 1a36363..0000000
--- a/assets/blocks/turrets/bases/block-4.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/turrets/bases/reinforced-block-3.png b/assets/blocks/turrets/bases/reinforced-block-3.png
deleted file mode 100644
index 840c001..0000000
--- a/assets/blocks/turrets/bases/reinforced-block-3.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/turrets/bases/reinforced-block-4.png b/assets/blocks/turrets/bases/reinforced-block-4.png
deleted file mode 100644
index a09af8d..0000000
--- a/assets/blocks/turrets/bases/reinforced-block-4.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/turrets/bases/reinforced-block-5.png b/assets/blocks/turrets/bases/reinforced-block-5.png
deleted file mode 100644
index efb72ac..0000000
--- a/assets/blocks/turrets/bases/reinforced-block-5.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/turrets/breach.png b/assets/blocks/turrets/breach.png
index b1aca8b..e9a490c 100644
--- a/assets/blocks/turrets/breach.png
+++ b/assets/blocks/turrets/breach.png
Binary files differ
diff --git a/assets/blocks/turrets/cyclone.png b/assets/blocks/turrets/cyclone.png
index 7c35527..96cabd4 100644
--- a/assets/blocks/turrets/cyclone.png
+++ b/assets/blocks/turrets/cyclone.png
Binary files differ
diff --git a/assets/blocks/turrets/diffuse.png b/assets/blocks/turrets/diffuse.png
index cc84024..3475747 100644
--- a/assets/blocks/turrets/diffuse.png
+++ b/assets/blocks/turrets/diffuse.png
Binary files differ
diff --git a/assets/blocks/turrets/disperse.png b/assets/blocks/turrets/disperse.png
index 605510c..641ae4b 100644
--- a/assets/blocks/turrets/disperse.png
+++ b/assets/blocks/turrets/disperse.png
Binary files differ
diff --git a/assets/blocks/turrets/duo.png b/assets/blocks/turrets/duo.png
index 6da03bd..2f7e385 100644
--- a/assets/blocks/turrets/duo.png
+++ b/assets/blocks/turrets/duo.png
Binary files differ
diff --git a/assets/blocks/turrets/foreshadow.png b/assets/blocks/turrets/foreshadow.png
index 5e138ab..381a2fe 100644
--- a/assets/blocks/turrets/foreshadow.png
+++ b/assets/blocks/turrets/foreshadow.png
Binary files differ
diff --git a/assets/blocks/turrets/fuse.png b/assets/blocks/turrets/fuse.png
index 464e535..bb9a0b6 100644
--- a/assets/blocks/turrets/fuse.png
+++ b/assets/blocks/turrets/fuse.png
Binary files differ
diff --git a/assets/blocks/turrets/hail.png b/assets/blocks/turrets/hail.png
index 436c95f..8250d37 100644
--- a/assets/blocks/turrets/hail.png
+++ b/assets/blocks/turrets/hail.png
Binary files differ
diff --git a/assets/blocks/turrets/lancer.png b/assets/blocks/turrets/lancer.png
index cc87aff..9fff5ba 100644
--- a/assets/blocks/turrets/lancer.png
+++ b/assets/blocks/turrets/lancer.png
Binary files differ
diff --git a/assets/blocks/turrets/lustre.png b/assets/blocks/turrets/lustre.png
index acbafb8..e436f52 100644
--- a/assets/blocks/turrets/lustre.png
+++ b/assets/blocks/turrets/lustre.png
Binary files differ
diff --git a/assets/blocks/turrets/malign.png b/assets/blocks/turrets/malign.png
index a485724..03e692f 100644
--- a/assets/blocks/turrets/malign.png
+++ b/assets/blocks/turrets/malign.png
Binary files differ
diff --git a/assets/blocks/turrets/meltdown.png b/assets/blocks/turrets/meltdown.png
index c0f7b2e..d63c8fb 100644
--- a/assets/blocks/turrets/meltdown.png
+++ b/assets/blocks/turrets/meltdown.png
Binary files differ
diff --git a/assets/blocks/turrets/parallax.png b/assets/blocks/turrets/parallax.png
index 9e4aec4..4d581dd 100644
--- a/assets/blocks/turrets/parallax.png
+++ b/assets/blocks/turrets/parallax.png
Binary files differ
diff --git a/assets/blocks/turrets/ripple.png b/assets/blocks/turrets/ripple.png
index 628c9d8..507f0b6 100644
--- a/assets/blocks/turrets/ripple.png
+++ b/assets/blocks/turrets/ripple.png
Binary files differ
diff --git a/assets/blocks/turrets/salvo.png b/assets/blocks/turrets/salvo.png
index 420957f..09136e0 100644
--- a/assets/blocks/turrets/salvo.png
+++ b/assets/blocks/turrets/salvo.png
Binary files differ
diff --git a/assets/blocks/turrets/scathe.png b/assets/blocks/turrets/scathe.png
index 3ea6ee2..897532a 100644
--- a/assets/blocks/turrets/scathe.png
+++ b/assets/blocks/turrets/scathe.png
Binary files differ
diff --git a/assets/blocks/turrets/scatter.png b/assets/blocks/turrets/scatter.png
index 2db3fbc..1cc620a 100644
--- a/assets/blocks/turrets/scatter.png
+++ b/assets/blocks/turrets/scatter.png
Binary files differ
diff --git a/assets/blocks/turrets/scorch.png b/assets/blocks/turrets/scorch.png
index 7d145ad..473e8d3 100644
--- a/assets/blocks/turrets/scorch.png
+++ b/assets/blocks/turrets/scorch.png
Binary files differ
diff --git a/assets/blocks/turrets/segment.png b/assets/blocks/turrets/segment.png
index b6997d2..c34929c 100644
--- a/assets/blocks/turrets/segment.png
+++ b/assets/blocks/turrets/segment.png
Binary files differ
diff --git a/assets/blocks/turrets/smite.png b/assets/blocks/turrets/smite.png
index 4b5262f..3402149 100644
--- a/assets/blocks/turrets/smite.png
+++ b/assets/blocks/turrets/smite.png
Binary files differ
diff --git a/assets/blocks/turrets/spectre.png b/assets/blocks/turrets/spectre.png
index 5c96770..811ef6e 100644
--- a/assets/blocks/turrets/spectre.png
+++ b/assets/blocks/turrets/spectre.png
Binary files differ
diff --git a/assets/blocks/turrets/sublimate.png b/assets/blocks/turrets/sublimate.png
index d0e1a76..5155235 100644
--- a/assets/blocks/turrets/sublimate.png
+++ b/assets/blocks/turrets/sublimate.png
Binary files differ
diff --git a/assets/blocks/turrets/swarmer.png b/assets/blocks/turrets/swarmer.png
index ed12771..1680beb 100644
--- a/assets/blocks/turrets/swarmer.png
+++ b/assets/blocks/turrets/swarmer.png
Binary files differ
diff --git a/assets/blocks/turrets/titan.png b/assets/blocks/turrets/titan.png
index 68db74e..e781843 100644
--- a/assets/blocks/turrets/titan.png
+++ b/assets/blocks/turrets/titan.png
Binary files differ
diff --git a/assets/blocks/turrets/tsunami.png b/assets/blocks/turrets/tsunami.png
index 6c5324e..6f72793 100644
--- a/assets/blocks/turrets/tsunami.png
+++ b/assets/blocks/turrets/tsunami.png
Binary files differ
diff --git a/assets/blocks/turrets/wave.png b/assets/blocks/turrets/wave.png
index ca784fe..360994d 100644
--- a/assets/blocks/turrets/wave.png
+++ b/assets/blocks/turrets/wave.png
Binary files differ
diff --git a/assets/blocks/units/repair-point-base.png b/assets/blocks/units/repair-point-base.png
deleted file mode 100644
index d68eb37..0000000
--- a/assets/blocks/units/repair-point-base.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/units/repair-point.png b/assets/blocks/units/repair-point.png
index 9bad782..1f81c2c 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 f20f3d7..f410dbf 100644
--- a/assets/blocks/units/repair-turret.png
+++ b/assets/blocks/units/repair-turret.png
Binary files differ
diff --git a/src/block/distribution.rs b/src/block/distribution.rs
index 62b071f..e65cf98 100644
--- a/src/block/distribution.rs
+++ b/src/block/distribution.rs
@@ -57,14 +57,14 @@ fn draw_stack(
let ctx = ctx.unwrap();
let mask = mask(ctx, rot, name);
let edge = load!(concat edge => name which is ["surge-conveyor" | "plastanium-conveyor"], s);
- let edgify = |skip, mut to: Image<&mut [u8], 4>| {
+ let edgify = |skip, to: &mut Image<&mut [u8], 4>| {
for i in 0..4 {
if i == skip {
continue;
}
let mut edge = edge.clone();
edge.rotate(i);
- to.overlay(edge.borrow());
+ to.overlay(&edge.borrow());
}
};
let gimme = |n: u8| match n {
@@ -79,19 +79,19 @@ fn draw_stack(
let mut base = gimme(2);
edgify(
rot.mirrored(true, true).rotated(false).count(),
- base.borrow_mut(),
+ &mut base.borrow_mut(),
);
base
} else if mask == B0000 && empty {
// single
let mut base = gimme(0);
base.rotate(rot.rotated(false).count());
- edgify(5, base.borrow_mut());
+ edgify(5, &mut base.borrow_mut());
base
} else if mask == B0000 {
// input
let mut base = gimme(1);
- edgify(rot.rotated(false).count(), base.borrow_mut());
+ edgify(rot.rotated(false).count(), &mut base.borrow_mut());
base
} else {
// directional
diff --git a/src/block/logic.rs b/src/block/logic.rs
index 5cdae40..da7c47b 100644
--- a/src/block/logic.rs
+++ b/src/block/logic.rs
@@ -159,7 +159,7 @@ impl BlockLogic for CanvasBlock {
let mut borders = load!("canvas", s);
borders
.borrow_mut()
- .overlay_at(img.as_ref(), offset, offset);
+ .overlay_at(&img.as_ref(), offset, offset);
return borders;
}
diff --git a/src/block/turrets.rs b/src/block/turrets.rs
index 522906a..3e65ebe 100644
--- a/src/block/turrets.rs
+++ b/src/block/turrets.rs
@@ -1,89 +1,45 @@
//! idk why its not in the [`crate::block::defense`] module
use super::simple::make_simple;
-use super::{BlockLogic, Rotation, State};
use crate::block::make_register;
use crate::block::simple::cost;
-use crate::data::{renderer::*, DataRead, ReadError};
+use crate::data::{DataRead, ReadError};
make_register! {
- "duo" => ItemTurret::new(1, true, cost!(Copper: 35));
- "scatter" => ItemTurret::new(2, true, cost!(Copper: 85, Lead: 45));
- "scorch" => ItemTurret::new(1, true, cost!(Copper: 25, Graphite: 22));
- "hail" => ItemTurret::new(1, true, cost!(Copper: 40, Graphite: 17));
- "wave" => Turret::new(2, true, cost!(Copper: 25, Lead: 75, Metaglass: 45));
- "tsunami" => Turret::new(3, true, cost!(Lead: 400, Metaglass: 100, Titanium: 250, Thorium: 100));
- "lancer" => Turret::new(2, true, cost!(Copper: 60, Lead: 70, Titanium: 30, Silicon: 60));
- "arc" => Turret::new(1, true, cost!(Copper: 50, Lead: 50));
- "parallax" => TractorBeamTurret::new(2, true, cost!(Graphite: 30, Titanium: 90, Silicon: 120));
- "swarmer" => ItemTurret::new(2, true, cost!(Graphite: 35, Titanium: 35, Silicon: 30, Plastanium: 45));
- "salvo" => ItemTurret::new(2, true, cost!(Copper: 100, Graphite: 80, Titanium: 50));
- "segment" => PointDefenseTurret::new(2, true, cost!(Titanium: 40, Thorium: 80, Silicon: 130, PhaseFabric: 40));
- "fuse" => ItemTurret::new(3, true, cost!(Copper: 225, Graphite: 225, Thorium: 100));
- "ripple" => ItemTurret::new(3, true, cost!(Copper: 150, Graphite: 135, Titanium: 60));
- "cyclone" => ItemTurret::new(3, true, cost!(Copper: 200, Titanium: 125, Plastanium: 80));
- "foreshadow" => ItemTurret::new(4, true, cost!(Copper: 1000, Metaglass: 600, Silicon: 600, Plastanium: 200, SurgeAlloy: 300));
- "spectre" => ItemTurret::new(4, true, cost!(Copper: 900, Graphite: 300, Thorium: 250, Plastanium: 175, SurgeAlloy: 250));
- "meltdown" => Turret::new(4, true, cost!(Copper: 1200, Lead: 350, Graphite: 300, Silicon: 325, SurgeAlloy: 325));
- "breach" => ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 150, Graphite: 250));
- "diffuse" => ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 200, Graphite: 200, Tungsten: 50));
- "sublimate" => ContinousTurret::new(3, true, cost!(Tungsten: 150, Silicon: 200, Oxide: 40, Beryllium: 400));
- "titan" => ItemTurret::new(4, true, cost!(Tungsten: 250, Silicon: 300, Thorium: 400));
- "disperse" => ItemTurret::new(4, true, cost!(Thorium: 50, Oxide: 150, Silicon: 200, Beryllium: 350));
- "afflict" => Turret::new(4, true, cost!(SurgeAlloy: 100, Silicon: 200, Graphite: 250, Oxide: 40));
- "lustre" => ContinousTurret::new(4, true, cost!(Silicon: 250, Graphite: 200, Oxide: 50, Carbide: 90));
- "scathe" => ItemTurret::new(4, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
- "malign" => Turret::new(5, true, cost!(Carbide: 400, Beryllium: 2000, Silicon: 800, Graphite: 800, PhaseFabric: 300));
- "smite" => ItemTurret::new(5, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
+ "duo" -> ItemTurret::new(1, true, cost!(Copper: 35));
+ "scatter" -> ItemTurret::new(2, true, cost!(Copper: 85, Lead: 45));
+ "scorch" -> ItemTurret::new(1, true, cost!(Copper: 25, Graphite: 22));
+ "hail" -> ItemTurret::new(1, true, cost!(Copper: 40, Graphite: 17));
+ "wave" -> Turret::new(2, true, cost!(Copper: 25, Lead: 75, Metaglass: 45));
+ "tsunami" -> Turret::new(3, true, cost!(Lead: 400, Metaglass: 100, Titanium: 250, Thorium: 100));
+ "lancer" -> Turret::new(2, true, cost!(Copper: 60, Lead: 70, Titanium: 30, Silicon: 60));
+ "arc" -> Turret::new(1, true, cost!(Copper: 50, Lead: 50));
+ "parallax" -> TractorBeamTurret::new(2, true, cost!(Graphite: 30, Titanium: 90, Silicon: 120));
+ "swarmer" -> ItemTurret::new(2, true, cost!(Graphite: 35, Titanium: 35, Silicon: 30, Plastanium: 45));
+ "salvo" -> ItemTurret::new(2, true, cost!(Copper: 100, Graphite: 80, Titanium: 50));
+ "segment" -> PointDefenseTurret::new(2, true, cost!(Titanium: 40, Thorium: 80, Silicon: 130, PhaseFabric: 40));
+ "fuse" -> ItemTurret::new(3, true, cost!(Copper: 225, Graphite: 225, Thorium: 100));
+ "ripple" -> ItemTurret::new(3, true, cost!(Copper: 150, Graphite: 135, Titanium: 60));
+ "cyclone" -> ItemTurret::new(3, true, cost!(Copper: 200, Titanium: 125, Plastanium: 80));
+ "foreshadow" -> ItemTurret::new(4, true, cost!(Copper: 1000, Metaglass: 600, Silicon: 600, Plastanium: 200, SurgeAlloy: 300));
+ "spectre" -> ItemTurret::new(4, true, cost!(Copper: 900, Graphite: 300, Thorium: 250, Plastanium: 175, SurgeAlloy: 250));
+ "meltdown" -> Turret::new(4, true, cost!(Copper: 1200, Lead: 350, Graphite: 300, Silicon: 325, SurgeAlloy: 325));
+ "breach" -> ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 150, Graphite: 250));
+ "diffuse" -> ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 200, Graphite: 200, Tungsten: 50));
+ "sublimate" -> ContinousTurret::new(3, true, cost!(Tungsten: 150, Silicon: 200, Oxide: 40, Beryllium: 400));
+ "titan" -> ItemTurret::new(4, true, cost!(Tungsten: 250, Silicon: 300, Thorium: 400));
+ "disperse" -> ItemTurret::new(4, true, cost!(Thorium: 50, Oxide: 150, Silicon: 200, Beryllium: 350));
+ "afflict" -> Turret::new(4, true, cost!(SurgeAlloy: 100, Silicon: 200, Graphite: 250, Oxide: 40));
+ "lustre" -> ContinousTurret::new(4, true, cost!(Silicon: 250, Graphite: 200, Oxide: 50, Carbide: 90));
+ "scathe" -> ItemTurret::new(4, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
+ "malign" -> Turret::new(5, true, cost!(Carbide: 400, Beryllium: 2000, Silicon: 800, Graphite: 800, PhaseFabric: 300));
+ "smite" -> ItemTurret::new(5, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
}
-fn draw_turret(
- me: &impl BlockLogic,
- name: &str,
- _: Option<&State>,
- _: Option<&RenderingContext>,
- _: Rotation,
- s: Scale,
-) -> ImageHolder<4> {
- let size = me.get_size();
- let mut base = match name {
- "breach" | "diffuse" | "sublimate" | "titan" | "disperse" | "afflict" | "lustre"
- | "scathe" | "malign" | "smite" => load!(s -> match size {
- 3 => "reinforced-block-3",
- 4 => "reinforced-block-4",
- 5 => "reinforced-block-5",
- }),
- _ => load!(s -> match size {
- 1 => "block-1",
- 2 => "block-2",
- 3 => "block-3",
- 4 => "block-4",
- }),
- };
- base.overlay(&load!(from name which is ["duo" | "scatter" | "scorch" | "hail" | "wave" | "tsunami" | "lancer" | "arc" | "parallax" | "swarmer" | "salvo" | "segment" | "fuse" | "ripple" | "cyclone" | "foreshadow" | "spectre" | "meltdown" | "breach" | "diffuse" | "sublimate" | "titan" | "disperse" | "afflict" | "lustre" | "scathe" | "malign" | "smite"], s));
- base
-}
-
-make_simple!(Turret, draw_turret, |_, _, _, buff: &mut DataRead| {
- read_turret(buff)
-});
-make_simple!(
- PointDefenseTurret,
- draw_turret,
- |_, _, _, buff: &mut DataRead| read_point_defense_turret(buff)
-);
-make_simple!(
- ContinousTurret,
- draw_turret,
- |_, _, _, buff: &mut DataRead| { read_continous_turret(buff) }
-);
-make_simple!(
- TractorBeamTurret,
- draw_turret,
- |_, _, _, buff: &mut DataRead| { read_tractor_beam_turret(buff) }
-);
-make_simple!(ItemTurret, draw_turret, |_, _, _, buff: &mut DataRead| {
- read_item_turret(buff)
-});
+make_simple!(Turret => |_, _, _, buff: &mut DataRead| read_turret(buff));
+make_simple!(PointDefenseTurret => |_, _, _, buff: &mut DataRead| read_point_defense_turret(buff));
+make_simple!(ContinousTurret => |_, _, _, buff: &mut DataRead| read_continous_turret(buff));
+make_simple!(TractorBeamTurret => |_, _, _, buff: &mut DataRead| read_tractor_beam_turret(buff));
+make_simple!(ItemTurret => |_, _, _, buff: &mut DataRead| read_item_turret(buff));
/// format:
/// - call [`read_turret`]
diff --git a/src/block/units.rs b/src/block/units.rs
index 3587c9f..175fe56 100644
--- a/src/block/units.rs
+++ b/src/block/units.rs
@@ -89,22 +89,7 @@ make_simple!(
);
make_simple!(
- RepairTurret,
- |_, n, _, _, _, scl| {
- match n {
- "repair-turret" => {
- let mut bot = load!("block-2", scl);
- bot.overlay(&load!("repair-turret", scl));
- bot
- }
- _ => {
- let mut bot = load!("repair-point-base", scl);
- bot.overlay(&load!("repair-point", scl));
- bot
- }
- }
- },
- |_, _, _, buff: &mut DataRead| {
+ RepairTurret => |_, _, _, buff: &mut DataRead| {
buff.skip(4) // rotation: [`f32`]
}
);
@@ -123,8 +108,8 @@ make_register! {
cost!(Lead: 2000, Titanium: 2000, Thorium: 750, Silicon: 1000, Plastanium: 450, PhaseFabric: 600));
"tetrative-reconstructor" => ConstructorBlock::new(9, false,
cost!(Lead: 4000, Thorium: 1000, Silicon: 3000, Plastanium: 600, PhaseFabric: 600, SurgeAlloy: 800));
- "repair-point" => RepairTurret::new(1, true, cost!(Copper: 30, Lead: 30, Silicon: 20));
- "repair-turret" => RepairTurret::new(2, true, cost!(Thorium: 80, Silicon: 90, Plastanium: 60));
+ "repair-point" -> RepairTurret::new(1, true, cost!(Copper: 30, Lead: 30, Silicon: 20));
+ "repair-turret" -> RepairTurret::new(2, true, cost!(Thorium: 80, Silicon: 90, Plastanium: 60));
"tank-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 200, Beryllium: 150), &[unit::Type::Stell]);
"ship-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 250, Beryllium: 200), &[unit::Type::Elude]);
"mech-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 200, Graphite: 300, Tungsten: 60), &[unit::Type::Merui]);
diff --git a/src/data/renderer.rs b/src/data/renderer.rs
index 93f1a7e..1731802 100644
--- a/src/data/renderer.rs
+++ b/src/data/renderer.rs
@@ -128,12 +128,13 @@ impl Renderable for Schematic<'_> {
let x = x as u32 - ((tile.block.get_size() - 1) / 2) as u32;
let y = self.height as u32 - y as u32 - ((tile.block.get_size() / 2) + 1) as u32;
canvas.as_mut().overlay_at(
- tile.image(
- ctx.as_ref(),
- tile.get_rotation().unwrap_or(Rotation::Up),
- Scale::Full,
- )
- .borrow(),
+ &tile
+ .image(
+ ctx.as_ref(),
+ tile.get_rotation().unwrap_or(Rotation::Up),
+ Scale::Full,
+ )
+ .borrow(),
(x + 1) * 32,
(y + 1) * 32,
);
@@ -176,13 +177,13 @@ impl Renderable for Map<'_> {
// draw the floor first.
// println!("draw {tile:?} ({x}, {y}) + {scale:?}");
floor.as_mut().overlay_at(
- tile.floor(scale).borrow(),
+ &tile.floor(scale).borrow(),
scale * x as u32,
scale * y as u32,
);
if tile.has_ore() {
floor.as_mut().overlay_at(
- tile.ore(scale).borrow(),
+ &tile.ore(scale).borrow(),
scale * x as u32,
scale * y as u32,
);
@@ -207,13 +208,13 @@ impl Renderable for Map<'_> {
None
};
top.as_mut().overlay_at(
- tile.build_image(ctx.as_ref(), scale).borrow(),
+ &tile.build_image(ctx.as_ref(), scale).borrow(),
scale * x as u32,
scale * y as u32,
);
}
}
- floor.as_mut().overlay_at(top.as_ref(), 0, 0);
+ floor.as_mut().overlay_at(&top.as_ref(), 0, 0);
floor
}
}
diff --git a/src/utils/image.rs b/src/utils/image.rs
index 70f6261..c89f8cb 100644
--- a/src/utils/image.rs
+++ b/src/utils/image.rs
@@ -3,13 +3,13 @@ use std::{num::NonZeroU32, slice::SliceIndex};
pub trait Overlay<W> {
/// Overlay with => self at coordinates x, y, without blending
- fn overlay_at(&mut self, with: W, x: u32, y: u32) -> &mut Self;
+ fn overlay_at(&mut self, with: &W, x: u32, y: u32) -> &mut Self;
}
pub trait RepeatNew {
type Output;
/// Repeat self till it fills x, y
- fn repeated(self, x: u32, y: u32) -> Self::Output;
+ fn repeated(&self, x: u32, y: u32) -> Self::Output;
}
pub trait ImageUtils {
@@ -39,7 +39,7 @@ macro_rules! unsafe_assert {
}
impl Overlay<Image<&[u8], 3>> for Image<&mut [u8], 3> {
- fn overlay_at(&mut self, with: Image<&[u8], 3>, x: u32, y: u32) -> &mut Self {
+ fn overlay_at(&mut self, with: &Image<&[u8], 3>, x: u32, y: u32) -> &mut Self {
for j in 0..with.height() {
for i in 0..with.width() {
unsafe {
@@ -60,7 +60,7 @@ impl Overlay<Image<&[u8], 3>> for Image<&mut [u8], 3> {
}
impl Overlay<Image<&[u8], 4>> for Image<&mut [u8], 3> {
- fn overlay_at(&mut self, with: Image<&[u8], 4>, x: u32, y: u32) -> &mut Self {
+ fn overlay_at(&mut self, with: &Image<&[u8], 4>, x: u32, y: u32) -> &mut Self {
for j in 0..with.height() {
for i in 0..with.width() {
unsafe {
@@ -89,7 +89,7 @@ impl Overlay<Image<&[u8], 4>> for Image<&mut [u8], 3> {
}
impl Overlay<Image<&[u8], 4>> for Image<&mut [u8], 4> {
- fn overlay_at(&mut self, with: Image<&[u8], 4>, x: u32, y: u32) -> &mut Self {
+ fn overlay_at(&mut self, with: &Image<&[u8], 4>, x: u32, y: u32) -> &mut Self {
for j in 0..with.height() {
for i in 0..with.width() {
unsafe {
@@ -118,12 +118,12 @@ impl Overlay<Image<&[u8], 4>> for Image<&mut [u8], 4> {
impl RepeatNew for Image<&[u8], 4> {
type Output = Image<Vec<u8>, 4>;
- fn repeated(self, x: u32, y: u32) -> Self::Output {
+ fn repeated(&self, x: u32, y: u32) -> Self::Output {
let mut img = Image::alloc(x, y); // could probably optimize this a ton but eh
for x in 0..(x / self.width()) {
for y in 0..(y / self.height()) {
let a: &mut Image<&mut [u8], 4> = &mut img.as_mut();
- a.overlay_at(self.copy(), x * self.width(), y * self.height());
+ a.overlay_at(self, x * self.width(), y * self.height());
}
}
img
@@ -235,8 +235,8 @@ impl ImageUtils for Image<&mut [u8], 4> {
}
self
}
- type With<'a> = Image<&'a [u8], 4>;
- fn overlay(&mut self, with: Image<&[u8], 4>) -> &mut Self {
+ type With<'a> = &'a Image<&'a [u8], 4>;
+ fn overlay(&mut self, with: &Image<&[u8], 4>) -> &mut Self {
debug_assert_eq!(self.width(), with.width());
debug_assert_eq!(self.height(), with.height());
unsafe_assert!(self.buffer.len() % 4 == 0);
@@ -495,9 +495,9 @@ impl<const CHANNELS: usize> ImageHolder<CHANNELS> {
}
}
-impl<'a> Overlay<&'a ImageHolder<4>> for ImageHolder<4> {
- fn overlay_at(&mut self, with: &'a ImageHolder<4>, x: u32, y: u32) -> &mut Self {
- self.borrow_mut().overlay_at(with.borrow(), x, y);
+impl Overlay<ImageHolder<4>> for ImageHolder<4> {
+ fn overlay_at(&mut self, with: &ImageHolder<4>, x: u32, y: u32) -> &mut Self {
+ self.borrow_mut().overlay_at(&with.borrow(), x, y);
self
}
}
@@ -509,7 +509,7 @@ impl ImageUtils for ImageHolder<4> {
}
type With<'a> = &'a Self;
fn overlay(&mut self, with: &Self) -> &mut Self {
- self.borrow_mut().overlay(with.borrow());
+ self.borrow_mut().overlay(&with.borrow());
self
}