mindustry logic execution, map- and schematic- parsing and rendering
-rw-r--r--assets/blocks/environment/arkyic-vent.pngbin946 -> 0 bytes
-rw-r--r--assets/blocks/environment/carbon-vent.pngbin923 -> 0 bytes
-rw-r--r--assets/blocks/environment/crystalline-vent.pngbin942 -> 0 bytes
-rw-r--r--assets/blocks/environment/pur-bush.pngbin287 -> 185 bytes
-rw-r--r--assets/blocks/environment/red-stone-vent.pngbin944 -> 0 bytes
-rw-r--r--assets/blocks/environment/rhyolite-vent.pngbin890 -> 0 bytes
-rw-r--r--assets/blocks/environment/yellow-stone-vent.pngbin942 -> 0 bytes
-rw-r--r--assets/blocks/environment/yellowcoral.pngbin432 -> 317 bytes
-rw-r--r--assets/blocks/floors/arkycite-floor.png (renamed from assets/blocks/environment/arkycite-floor.png)bin175 -> 175 bytes
-rw-r--r--assets/blocks/floors/arkyic-stone.png (renamed from assets/blocks/environment/arkyic-stone.png)bin175 -> 175 bytes
-rw-r--r--assets/blocks/floors/arkyic-vent.pngbin0 -> 687 bytes
-rw-r--r--assets/blocks/floors/basalt.png (renamed from assets/blocks/environment/basalt.png)bin155 -> 155 bytes
-rw-r--r--assets/blocks/floors/beryllic-stone.png (renamed from assets/blocks/environment/beryllic-stone.png)bin178 -> 178 bytes
-rw-r--r--assets/blocks/floors/bluemat.png (renamed from assets/blocks/environment/bluemat.png)bin157 -> 157 bytes
-rw-r--r--assets/blocks/floors/carbon-stone.png (renamed from assets/blocks/environment/carbon-stone.png)bin301 -> 301 bytes
-rw-r--r--assets/blocks/floors/carbon-vent.pngbin0 -> 688 bytes
-rw-r--r--assets/blocks/floors/char.png (renamed from assets/blocks/environment/char.png)bin221 -> 221 bytes
-rw-r--r--assets/blocks/floors/core-zone.png (renamed from assets/blocks/environment/core-zone.png)bin172 -> 172 bytes
-rw-r--r--assets/blocks/floors/crater-stone.png (renamed from assets/blocks/environment/crater-stone.png)bin213 -> 213 bytes
-rw-r--r--assets/blocks/floors/crystal-floor.png (renamed from assets/blocks/environment/crystal-floor.png)bin180 -> 180 bytes
-rw-r--r--assets/blocks/floors/crystalline-stone.png (renamed from assets/blocks/environment/crystalline-stone.png)bin165 -> 165 bytes
-rw-r--r--assets/blocks/floors/crystalline-vent.pngbin0 -> 684 bytes
-rw-r--r--assets/blocks/floors/dacite.png (renamed from assets/blocks/environment/dacite.png)bin172 -> 172 bytes
-rw-r--r--assets/blocks/floors/dark-panel-1.png (renamed from assets/blocks/environment/dark-panel-1.png)bin187 -> 187 bytes
-rw-r--r--assets/blocks/floors/dark-panel-2.png (renamed from assets/blocks/environment/dark-panel-2.png)bin227 -> 227 bytes
-rw-r--r--assets/blocks/floors/dark-panel-3.png (renamed from assets/blocks/environment/dark-panel-3.png)bin158 -> 158 bytes
-rw-r--r--assets/blocks/floors/dark-panel-4.png (renamed from assets/blocks/environment/dark-panel-4.png)bin210 -> 210 bytes
-rw-r--r--assets/blocks/floors/dark-panel-5.png (renamed from assets/blocks/environment/dark-panel-5.png)bin196 -> 196 bytes
-rw-r--r--assets/blocks/floors/dark-panel-6.png (renamed from assets/blocks/environment/dark-panel-6.png)bin174 -> 174 bytes
-rw-r--r--assets/blocks/floors/darksand-tainted-water.png (renamed from assets/blocks/environment/darksand-tainted-water.png)bin313 -> 313 bytes
-rw-r--r--assets/blocks/floors/darksand-water.png (renamed from assets/blocks/environment/darksand-water.png)bin313 -> 313 bytes
-rw-r--r--assets/blocks/floors/darksand.png (renamed from assets/blocks/environment/darksand.png)bin157 -> 157 bytes
-rw-r--r--assets/blocks/floors/deep-tainted-water.png (renamed from assets/blocks/environment/deep-tainted-water.png)bin172 -> 172 bytes
-rw-r--r--assets/blocks/floors/deep-water.png (renamed from assets/blocks/environment/deep-water.png)bin172 -> 172 bytes
-rw-r--r--assets/blocks/floors/dense-red-stone.png (renamed from assets/blocks/environment/dense-red-stone.png)bin200 -> 200 bytes
-rw-r--r--assets/blocks/floors/dirt.png (renamed from assets/blocks/environment/dirt.png)bin143 -> 143 bytes
-rw-r--r--assets/blocks/floors/ferric-craters.png (renamed from assets/blocks/environment/ferric-craters.png)bin216 -> 216 bytes
-rw-r--r--assets/blocks/floors/ferric-stone.png (renamed from assets/blocks/environment/ferric-stone.png)bin154 -> 154 bytes
-rw-r--r--assets/blocks/floors/grass.png (renamed from assets/blocks/environment/grass.png)bin152 -> 152 bytes
-rw-r--r--assets/blocks/floors/hotrock.png (renamed from assets/blocks/environment/hotrock.png)bin225 -> 225 bytes
-rw-r--r--assets/blocks/floors/ice-snow.png (renamed from assets/blocks/environment/ice-snow.png)bin363 -> 363 bytes
-rw-r--r--assets/blocks/floors/ice.png (renamed from assets/blocks/environment/ice.png)bin184 -> 184 bytes
-rw-r--r--assets/blocks/floors/magmarock.png (renamed from assets/blocks/environment/magmarock.png)bin262 -> 262 bytes
-rw-r--r--assets/blocks/floors/metal-floor-2.png (renamed from assets/blocks/environment/metal-floor-2.png)bin131 -> 131 bytes
-rw-r--r--assets/blocks/floors/metal-floor-3.png (renamed from assets/blocks/environment/metal-floor-3.png)bin150 -> 150 bytes
-rw-r--r--assets/blocks/floors/metal-floor-4.png (renamed from assets/blocks/environment/metal-floor-4.png)bin184 -> 184 bytes
-rw-r--r--assets/blocks/floors/metal-floor-5.png (renamed from assets/blocks/environment/metal-floor-5.png)bin162 -> 162 bytes
-rw-r--r--assets/blocks/floors/metal-floor-damaged.png (renamed from assets/blocks/environment/metal-floor-damaged.png)bin216 -> 216 bytes
-rw-r--r--assets/blocks/floors/metal-floor.png (renamed from assets/blocks/environment/metal-floor.png)bin175 -> 175 bytes
-rw-r--r--assets/blocks/floors/molten-slag.png (renamed from assets/blocks/environment/molten-slag.png)bin1279 -> 1279 bytes
-rw-r--r--assets/blocks/floors/moss.png (renamed from assets/blocks/environment/moss.png)bin167 -> 167 bytes
-rw-r--r--assets/blocks/floors/mud.png (renamed from assets/blocks/environment/mud.png)bin1297 -> 1297 bytes
-rw-r--r--assets/blocks/floors/pooled-cryofluid.png (renamed from assets/blocks/environment/pooled-cryofluid.png)bin1311 -> 1311 bytes
-rw-r--r--assets/blocks/floors/red-ice.png (renamed from assets/blocks/environment/red-ice.png)bin200 -> 200 bytes
-rw-r--r--assets/blocks/floors/red-stone-vent.pngbin0 -> 684 bytes
-rw-r--r--assets/blocks/floors/red-stone.png (renamed from assets/blocks/environment/red-stone.png)bin181 -> 181 bytes
-rw-r--r--assets/blocks/floors/redmat.png (renamed from assets/blocks/environment/redmat.png)bin159 -> 159 bytes
-rw-r--r--assets/blocks/floors/regolith.png (renamed from assets/blocks/environment/regolith.png)bin164 -> 164 bytes
-rw-r--r--assets/blocks/floors/rhyolite-crater.png (renamed from assets/blocks/environment/rhyolite-crater.png)bin607 -> 607 bytes
-rw-r--r--assets/blocks/floors/rhyolite-vent.pngbin0 -> 662 bytes
-rw-r--r--assets/blocks/floors/rhyolite.png (renamed from assets/blocks/environment/rhyolite.png)bin576 -> 576 bytes
-rw-r--r--assets/blocks/floors/rough-rhyolite.png (renamed from assets/blocks/environment/rough-rhyolite.png)bin163 -> 163 bytes
-rw-r--r--assets/blocks/floors/salt.png (renamed from assets/blocks/environment/salt.png)bin186 -> 186 bytes
-rw-r--r--assets/blocks/floors/sand-floor.png (renamed from assets/blocks/environment/sand-floor.png)bin156 -> 156 bytes
-rw-r--r--assets/blocks/floors/sand-water.png (renamed from assets/blocks/environment/sand-water.png)bin314 -> 314 bytes
-rw-r--r--assets/blocks/floors/shale.png (renamed from assets/blocks/environment/shale.png)bin175 -> 175 bytes
-rw-r--r--assets/blocks/floors/shallow-water.png (renamed from assets/blocks/environment/shallow-water.png)bin172 -> 172 bytes
-rw-r--r--assets/blocks/floors/snow.png (renamed from assets/blocks/environment/snow.png)bin189 -> 189 bytes
-rw-r--r--assets/blocks/floors/space.png (renamed from assets/blocks/environment/space.png)bin96 -> 96 bytes
-rw-r--r--assets/blocks/floors/spore-moss.png (renamed from assets/blocks/environment/spore-moss.png)bin211 -> 211 bytes
-rw-r--r--assets/blocks/floors/stone.png (renamed from assets/blocks/environment/stone.png)bin154 -> 154 bytes
-rw-r--r--assets/blocks/floors/tainted-water.png (renamed from assets/blocks/environment/tainted-water.png)bin172 -> 172 bytes
-rw-r--r--assets/blocks/floors/tar.png (renamed from assets/blocks/environment/tar.png)bin96 -> 96 bytes
-rw-r--r--assets/blocks/floors/yellow-stone-plates.png (renamed from assets/blocks/environment/yellow-stone-plates.png)bin179 -> 179 bytes
-rw-r--r--assets/blocks/floors/yellow-stone-vent.pngbin0 -> 692 bytes
-rw-r--r--assets/blocks/floors/yellow-stone.png (renamed from assets/blocks/environment/yellow-stone.png)bin153 -> 153 bytes
-rw-r--r--build.rs60
-rw-r--r--src/block/mod.rs144
-rw-r--r--src/data/map.rs6
-rw-r--r--src/data/renderer.rs13
-rw-r--r--src/lib.rs1
-rw-r--r--src/utils/image/mod.rs30
-rw-r--r--src/utils/image/overlay.rs70
83 files changed, 176 insertions, 148 deletions
diff --git a/assets/blocks/environment/arkyic-vent.png b/assets/blocks/environment/arkyic-vent.png
deleted file mode 100644
index f67cbe3..0000000
--- a/assets/blocks/environment/arkyic-vent.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/carbon-vent.png b/assets/blocks/environment/carbon-vent.png
deleted file mode 100644
index d3e2570..0000000
--- a/assets/blocks/environment/carbon-vent.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/crystalline-vent.png b/assets/blocks/environment/crystalline-vent.png
deleted file mode 100644
index 2de8864..0000000
--- a/assets/blocks/environment/crystalline-vent.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/pur-bush.png b/assets/blocks/environment/pur-bush.png
index 24fee97..7dc9315 100644
--- a/assets/blocks/environment/pur-bush.png
+++ b/assets/blocks/environment/pur-bush.png
Binary files differ
diff --git a/assets/blocks/environment/red-stone-vent.png b/assets/blocks/environment/red-stone-vent.png
deleted file mode 100644
index b71ab18..0000000
--- a/assets/blocks/environment/red-stone-vent.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-vent.png b/assets/blocks/environment/rhyolite-vent.png
deleted file mode 100644
index d7b7ed0..0000000
--- a/assets/blocks/environment/rhyolite-vent.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone-vent.png b/assets/blocks/environment/yellow-stone-vent.png
deleted file mode 100644
index effb1ca..0000000
--- a/assets/blocks/environment/yellow-stone-vent.png
+++ /dev/null
Binary files differ
diff --git a/assets/blocks/environment/yellowcoral.png b/assets/blocks/environment/yellowcoral.png
index 5e3d6cc..21c6960 100644
--- a/assets/blocks/environment/yellowcoral.png
+++ b/assets/blocks/environment/yellowcoral.png
Binary files differ
diff --git a/assets/blocks/environment/arkycite-floor.png b/assets/blocks/floors/arkycite-floor.png
index 5ae0096..5ae0096 100644
--- a/assets/blocks/environment/arkycite-floor.png
+++ b/assets/blocks/floors/arkycite-floor.png
Binary files differ
diff --git a/assets/blocks/environment/arkyic-stone.png b/assets/blocks/floors/arkyic-stone.png
index 5f396a8..5f396a8 100644
--- a/assets/blocks/environment/arkyic-stone.png
+++ b/assets/blocks/floors/arkyic-stone.png
Binary files differ
diff --git a/assets/blocks/floors/arkyic-vent.png b/assets/blocks/floors/arkyic-vent.png
new file mode 100644
index 0000000..8dd5a87
--- /dev/null
+++ b/assets/blocks/floors/arkyic-vent.png
Binary files differ
diff --git a/assets/blocks/environment/basalt.png b/assets/blocks/floors/basalt.png
index 93ee858..93ee858 100644
--- a/assets/blocks/environment/basalt.png
+++ b/assets/blocks/floors/basalt.png
Binary files differ
diff --git a/assets/blocks/environment/beryllic-stone.png b/assets/blocks/floors/beryllic-stone.png
index 6a6720a..6a6720a 100644
--- a/assets/blocks/environment/beryllic-stone.png
+++ b/assets/blocks/floors/beryllic-stone.png
Binary files differ
diff --git a/assets/blocks/environment/bluemat.png b/assets/blocks/floors/bluemat.png
index e15530a..e15530a 100644
--- a/assets/blocks/environment/bluemat.png
+++ b/assets/blocks/floors/bluemat.png
Binary files differ
diff --git a/assets/blocks/environment/carbon-stone.png b/assets/blocks/floors/carbon-stone.png
index 76bde92..76bde92 100644
--- a/assets/blocks/environment/carbon-stone.png
+++ b/assets/blocks/floors/carbon-stone.png
Binary files differ
diff --git a/assets/blocks/floors/carbon-vent.png b/assets/blocks/floors/carbon-vent.png
new file mode 100644
index 0000000..f5d0fb5
--- /dev/null
+++ b/assets/blocks/floors/carbon-vent.png
Binary files differ
diff --git a/assets/blocks/environment/char.png b/assets/blocks/floors/char.png
index c6340ed..c6340ed 100644
--- a/assets/blocks/environment/char.png
+++ b/assets/blocks/floors/char.png
Binary files differ
diff --git a/assets/blocks/environment/core-zone.png b/assets/blocks/floors/core-zone.png
index 0a7bf40..0a7bf40 100644
--- a/assets/blocks/environment/core-zone.png
+++ b/assets/blocks/floors/core-zone.png
Binary files differ
diff --git a/assets/blocks/environment/crater-stone.png b/assets/blocks/floors/crater-stone.png
index 9cfc92f..9cfc92f 100644
--- a/assets/blocks/environment/crater-stone.png
+++ b/assets/blocks/floors/crater-stone.png
Binary files differ
diff --git a/assets/blocks/environment/crystal-floor.png b/assets/blocks/floors/crystal-floor.png
index 4ff6b86..4ff6b86 100644
--- a/assets/blocks/environment/crystal-floor.png
+++ b/assets/blocks/floors/crystal-floor.png
Binary files differ
diff --git a/assets/blocks/environment/crystalline-stone.png b/assets/blocks/floors/crystalline-stone.png
index 01fe740..01fe740 100644
--- a/assets/blocks/environment/crystalline-stone.png
+++ b/assets/blocks/floors/crystalline-stone.png
Binary files differ
diff --git a/assets/blocks/floors/crystalline-vent.png b/assets/blocks/floors/crystalline-vent.png
new file mode 100644
index 0000000..0538346
--- /dev/null
+++ b/assets/blocks/floors/crystalline-vent.png
Binary files differ
diff --git a/assets/blocks/environment/dacite.png b/assets/blocks/floors/dacite.png
index 470473a..470473a 100644
--- a/assets/blocks/environment/dacite.png
+++ b/assets/blocks/floors/dacite.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-1.png b/assets/blocks/floors/dark-panel-1.png
index 04e6b15..04e6b15 100644
--- a/assets/blocks/environment/dark-panel-1.png
+++ b/assets/blocks/floors/dark-panel-1.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-2.png b/assets/blocks/floors/dark-panel-2.png
index adbc44f..adbc44f 100644
--- a/assets/blocks/environment/dark-panel-2.png
+++ b/assets/blocks/floors/dark-panel-2.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-3.png b/assets/blocks/floors/dark-panel-3.png
index 7a3c38e..7a3c38e 100644
--- a/assets/blocks/environment/dark-panel-3.png
+++ b/assets/blocks/floors/dark-panel-3.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-4.png b/assets/blocks/floors/dark-panel-4.png
index 3030229..3030229 100644
--- a/assets/blocks/environment/dark-panel-4.png
+++ b/assets/blocks/floors/dark-panel-4.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-5.png b/assets/blocks/floors/dark-panel-5.png
index c956695..c956695 100644
--- a/assets/blocks/environment/dark-panel-5.png
+++ b/assets/blocks/floors/dark-panel-5.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-6.png b/assets/blocks/floors/dark-panel-6.png
index d7d3ba2..d7d3ba2 100644
--- a/assets/blocks/environment/dark-panel-6.png
+++ b/assets/blocks/floors/dark-panel-6.png
Binary files differ
diff --git a/assets/blocks/environment/darksand-tainted-water.png b/assets/blocks/floors/darksand-tainted-water.png
index 7f74cca..7f74cca 100644
--- a/assets/blocks/environment/darksand-tainted-water.png
+++ b/assets/blocks/floors/darksand-tainted-water.png
Binary files differ
diff --git a/assets/blocks/environment/darksand-water.png b/assets/blocks/floors/darksand-water.png
index 61c769d..61c769d 100644
--- a/assets/blocks/environment/darksand-water.png
+++ b/assets/blocks/floors/darksand-water.png
Binary files differ
diff --git a/assets/blocks/environment/darksand.png b/assets/blocks/floors/darksand.png
index ef61797..ef61797 100644
--- a/assets/blocks/environment/darksand.png
+++ b/assets/blocks/floors/darksand.png
Binary files differ
diff --git a/assets/blocks/environment/deep-tainted-water.png b/assets/blocks/floors/deep-tainted-water.png
index e06ab6a..e06ab6a 100644
--- a/assets/blocks/environment/deep-tainted-water.png
+++ b/assets/blocks/floors/deep-tainted-water.png
Binary files differ
diff --git a/assets/blocks/environment/deep-water.png b/assets/blocks/floors/deep-water.png
index ff4ee69..ff4ee69 100644
--- a/assets/blocks/environment/deep-water.png
+++ b/assets/blocks/floors/deep-water.png
Binary files differ
diff --git a/assets/blocks/environment/dense-red-stone.png b/assets/blocks/floors/dense-red-stone.png
index 40d1694..40d1694 100644
--- a/assets/blocks/environment/dense-red-stone.png
+++ b/assets/blocks/floors/dense-red-stone.png
Binary files differ
diff --git a/assets/blocks/environment/dirt.png b/assets/blocks/floors/dirt.png
index 1f2b788..1f2b788 100644
--- a/assets/blocks/environment/dirt.png
+++ b/assets/blocks/floors/dirt.png
Binary files differ
diff --git a/assets/blocks/environment/ferric-craters.png b/assets/blocks/floors/ferric-craters.png
index 83155f5..83155f5 100644
--- a/assets/blocks/environment/ferric-craters.png
+++ b/assets/blocks/floors/ferric-craters.png
Binary files differ
diff --git a/assets/blocks/environment/ferric-stone.png b/assets/blocks/floors/ferric-stone.png
index 2dabf3d..2dabf3d 100644
--- a/assets/blocks/environment/ferric-stone.png
+++ b/assets/blocks/floors/ferric-stone.png
Binary files differ
diff --git a/assets/blocks/environment/grass.png b/assets/blocks/floors/grass.png
index 662dc7b..662dc7b 100644
--- a/assets/blocks/environment/grass.png
+++ b/assets/blocks/floors/grass.png
Binary files differ
diff --git a/assets/blocks/environment/hotrock.png b/assets/blocks/floors/hotrock.png
index 1aa6bb3..1aa6bb3 100644
--- a/assets/blocks/environment/hotrock.png
+++ b/assets/blocks/floors/hotrock.png
Binary files differ
diff --git a/assets/blocks/environment/ice-snow.png b/assets/blocks/floors/ice-snow.png
index 3711749..3711749 100644
--- a/assets/blocks/environment/ice-snow.png
+++ b/assets/blocks/floors/ice-snow.png
Binary files differ
diff --git a/assets/blocks/environment/ice.png b/assets/blocks/floors/ice.png
index 664678d..664678d 100644
--- a/assets/blocks/environment/ice.png
+++ b/assets/blocks/floors/ice.png
Binary files differ
diff --git a/assets/blocks/environment/magmarock.png b/assets/blocks/floors/magmarock.png
index 45626c1..45626c1 100644
--- a/assets/blocks/environment/magmarock.png
+++ b/assets/blocks/floors/magmarock.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-2.png b/assets/blocks/floors/metal-floor-2.png
index 4b0569e..4b0569e 100644
--- a/assets/blocks/environment/metal-floor-2.png
+++ b/assets/blocks/floors/metal-floor-2.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-3.png b/assets/blocks/floors/metal-floor-3.png
index 38ecedb..38ecedb 100644
--- a/assets/blocks/environment/metal-floor-3.png
+++ b/assets/blocks/floors/metal-floor-3.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-4.png b/assets/blocks/floors/metal-floor-4.png
index 6c17203..6c17203 100644
--- a/assets/blocks/environment/metal-floor-4.png
+++ b/assets/blocks/floors/metal-floor-4.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-5.png b/assets/blocks/floors/metal-floor-5.png
index ae13ed0..ae13ed0 100644
--- a/assets/blocks/environment/metal-floor-5.png
+++ b/assets/blocks/floors/metal-floor-5.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-damaged.png b/assets/blocks/floors/metal-floor-damaged.png
index 5f60992..5f60992 100644
--- a/assets/blocks/environment/metal-floor-damaged.png
+++ b/assets/blocks/floors/metal-floor-damaged.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor.png b/assets/blocks/floors/metal-floor.png
index c8483c7..c8483c7 100644
--- a/assets/blocks/environment/metal-floor.png
+++ b/assets/blocks/floors/metal-floor.png
Binary files differ
diff --git a/assets/blocks/environment/molten-slag.png b/assets/blocks/floors/molten-slag.png
index 1d41627..1d41627 100644
--- a/assets/blocks/environment/molten-slag.png
+++ b/assets/blocks/floors/molten-slag.png
Binary files differ
diff --git a/assets/blocks/environment/moss.png b/assets/blocks/floors/moss.png
index a835175..a835175 100644
--- a/assets/blocks/environment/moss.png
+++ b/assets/blocks/floors/moss.png
Binary files differ
diff --git a/assets/blocks/environment/mud.png b/assets/blocks/floors/mud.png
index 834c1ee..834c1ee 100644
--- a/assets/blocks/environment/mud.png
+++ b/assets/blocks/floors/mud.png
Binary files differ
diff --git a/assets/blocks/environment/pooled-cryofluid.png b/assets/blocks/floors/pooled-cryofluid.png
index aa36067..aa36067 100644
--- a/assets/blocks/environment/pooled-cryofluid.png
+++ b/assets/blocks/floors/pooled-cryofluid.png
Binary files differ
diff --git a/assets/blocks/environment/red-ice.png b/assets/blocks/floors/red-ice.png
index d54cf8a..d54cf8a 100644
--- a/assets/blocks/environment/red-ice.png
+++ b/assets/blocks/floors/red-ice.png
Binary files differ
diff --git a/assets/blocks/floors/red-stone-vent.png b/assets/blocks/floors/red-stone-vent.png
new file mode 100644
index 0000000..d579eea
--- /dev/null
+++ b/assets/blocks/floors/red-stone-vent.png
Binary files differ
diff --git a/assets/blocks/environment/red-stone.png b/assets/blocks/floors/red-stone.png
index 66e5b06..66e5b06 100644
--- a/assets/blocks/environment/red-stone.png
+++ b/assets/blocks/floors/red-stone.png
Binary files differ
diff --git a/assets/blocks/environment/redmat.png b/assets/blocks/floors/redmat.png
index f9df183..f9df183 100644
--- a/assets/blocks/environment/redmat.png
+++ b/assets/blocks/floors/redmat.png
Binary files differ
diff --git a/assets/blocks/environment/regolith.png b/assets/blocks/floors/regolith.png
index cb318b5..cb318b5 100644
--- a/assets/blocks/environment/regolith.png
+++ b/assets/blocks/floors/regolith.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-crater.png b/assets/blocks/floors/rhyolite-crater.png
index e35a1b3..e35a1b3 100644
--- a/assets/blocks/environment/rhyolite-crater.png
+++ b/assets/blocks/floors/rhyolite-crater.png
Binary files differ
diff --git a/assets/blocks/floors/rhyolite-vent.png b/assets/blocks/floors/rhyolite-vent.png
new file mode 100644
index 0000000..5996ae7
--- /dev/null
+++ b/assets/blocks/floors/rhyolite-vent.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite.png b/assets/blocks/floors/rhyolite.png
index 37fba67..37fba67 100644
--- a/assets/blocks/environment/rhyolite.png
+++ b/assets/blocks/floors/rhyolite.png
Binary files differ
diff --git a/assets/blocks/environment/rough-rhyolite.png b/assets/blocks/floors/rough-rhyolite.png
index 9700fff..9700fff 100644
--- a/assets/blocks/environment/rough-rhyolite.png
+++ b/assets/blocks/floors/rough-rhyolite.png
Binary files differ
diff --git a/assets/blocks/environment/salt.png b/assets/blocks/floors/salt.png
index a693c13..a693c13 100644
--- a/assets/blocks/environment/salt.png
+++ b/assets/blocks/floors/salt.png
Binary files differ
diff --git a/assets/blocks/environment/sand-floor.png b/assets/blocks/floors/sand-floor.png
index 9c5f4e9..9c5f4e9 100644
--- a/assets/blocks/environment/sand-floor.png
+++ b/assets/blocks/floors/sand-floor.png
Binary files differ
diff --git a/assets/blocks/environment/sand-water.png b/assets/blocks/floors/sand-water.png
index 0ff663c..0ff663c 100644
--- a/assets/blocks/environment/sand-water.png
+++ b/assets/blocks/floors/sand-water.png
Binary files differ
diff --git a/assets/blocks/environment/shale.png b/assets/blocks/floors/shale.png
index a0469bc..a0469bc 100644
--- a/assets/blocks/environment/shale.png
+++ b/assets/blocks/floors/shale.png
Binary files differ
diff --git a/assets/blocks/environment/shallow-water.png b/assets/blocks/floors/shallow-water.png
index 16dc4d0..16dc4d0 100644
--- a/assets/blocks/environment/shallow-water.png
+++ b/assets/blocks/floors/shallow-water.png
Binary files differ
diff --git a/assets/blocks/environment/snow.png b/assets/blocks/floors/snow.png
index afad902..afad902 100644
--- a/assets/blocks/environment/snow.png
+++ b/assets/blocks/floors/snow.png
Binary files differ
diff --git a/assets/blocks/environment/space.png b/assets/blocks/floors/space.png
index bccf464..bccf464 100644
--- a/assets/blocks/environment/space.png
+++ b/assets/blocks/floors/space.png
Binary files differ
diff --git a/assets/blocks/environment/spore-moss.png b/assets/blocks/floors/spore-moss.png
index 3661e8b..3661e8b 100644
--- a/assets/blocks/environment/spore-moss.png
+++ b/assets/blocks/floors/spore-moss.png
Binary files differ
diff --git a/assets/blocks/environment/stone.png b/assets/blocks/floors/stone.png
index 9fdeff0..9fdeff0 100644
--- a/assets/blocks/environment/stone.png
+++ b/assets/blocks/floors/stone.png
Binary files differ
diff --git a/assets/blocks/environment/tainted-water.png b/assets/blocks/floors/tainted-water.png
index 244610a..244610a 100644
--- a/assets/blocks/environment/tainted-water.png
+++ b/assets/blocks/floors/tainted-water.png
Binary files differ
diff --git a/assets/blocks/environment/tar.png b/assets/blocks/floors/tar.png
index a9bafc3..a9bafc3 100644
--- a/assets/blocks/environment/tar.png
+++ b/assets/blocks/floors/tar.png
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone-plates.png b/assets/blocks/floors/yellow-stone-plates.png
index 9f8a04b..9f8a04b 100644
--- a/assets/blocks/environment/yellow-stone-plates.png
+++ b/assets/blocks/floors/yellow-stone-plates.png
Binary files differ
diff --git a/assets/blocks/floors/yellow-stone-vent.png b/assets/blocks/floors/yellow-stone-vent.png
new file mode 100644
index 0000000..35d39e6
--- /dev/null
+++ b/assets/blocks/floors/yellow-stone-vent.png
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone.png b/assets/blocks/floors/yellow-stone.png
index fb0c640..fb0c640 100644
--- a/assets/blocks/environment/yellow-stone.png
+++ b/assets/blocks/floors/yellow-stone.png
Binary files differ
diff --git a/build.rs b/build.rs
index 94230a4..f725eba 100644
--- a/build.rs
+++ b/build.rs
@@ -38,26 +38,29 @@ fn main() {
let mut n = 22usize;
wr!(full => "pub mod full {{");
- wr!(full => "pub static EMPTY: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, &[0; 32 * 32 * 4]);");
+ wr!(full => "pub static EMPTY4: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, &[0; 32 * 32 * 4]);");
+ wr!(full => "pub static EMPTY: Image<&[u8], 3> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, &[0; 32 * 32 * 3]);");
wr!(quar => "pub mod quar {{");
// forced to do this because try_into isnt const
- wr!(quar => "pub static EMPTY: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, &[0; 8 * 8 * 4]);");
+ wr!(quar => "pub static EMPTY4: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, &[0; 8 * 8 * 4]);");
+ wr!(quar => "pub static EMPTY: Image<&[u8], 3> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, &[0; 8 * 8 * 3]);");
wr!(eigh => "pub mod eigh {{");
- wr!(eigh => "pub static EMPTY: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, &[0; 4 * 4 * 4]);");
+ wr!(eigh => "pub static EMPTY4: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, &[0; 4 * 4 * 4]);");
+ wr!(eigh => "pub static EMPTY: Image<&[u8], 3> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, &[0; 4 * 4 * 3]);");
for mut file in [&full, &quar, &eigh] {
wr!(file => "use crate::utils::Image;");
- wr!(file => "pub static CLIFF: Image<&[u8], 4> = EMPTY.copy();");
+ wr!(file => "pub static CLIFF: Image<&[u8], 4> = EMPTY4.copy();");
for i in 1..=16 {
- wr!(file => "pub static BUILD{}: Image<&[u8], 4> = EMPTY.copy();", i);
+ wr!(file => "pub static BUILD{}: Image<&[u8], 4> = EMPTY4.copy();", i);
}
}
for e in walkdir.into_iter().filter_map(Result::ok) {
let path = e.path();
if path.is_file() && let Some(e) = path.extension() && e == "png" {
- let p = DynamicImage::from_decoder(PngDecoder::new(BufReader::new(File::open(path).unwrap())).unwrap()).unwrap().into_rgba8();
+ let p = DynamicImage::from_decoder(PngDecoder::new(BufReader::new(File::open(path).unwrap())).unwrap()).unwrap();
if path.file_name().unwrap().to_str().unwrap().contains("-liquid.png") {
continue
}
@@ -65,6 +68,7 @@ fn main() {
if f.contains("bottom") || f.contains("-team") || f.contains("-end") || f.contains("stack") {
continue;
}
+ let rgb = path.components().any(|c| c.as_os_str() == "floors");
let path = kebab2bigsnek(path.with_extension("").file_name().unwrap().to_str().unwrap());
if matches!(path.as_str(), "CLIFF_CRUSHER_ROTATOR" | "NEOPLASIA_REACTOR_CENTER" | "FLUX_REACTOR_MID" | "EDGE" | "PHASE_CONVEYOR_BRIDGE" | "BRIDGE_ARROW" | "DUCT_BRIDGE_BRIDGE" | "DUCT_BRIDGE_ARROW" | "LAUNCHPOD" | "BRIDGE_CONVEYOR_BRIDGE" | "BRIDGE_CONVEYOR_ARROW" | "PHASE_CONVEYOR_ARROW" | "REINFORCED_BRIDGE_CONDUIT_ARROW" | "REINFORCED_BRIDGE_CONDUIT_BRIDGE" | "PHASE_CONDUIT_BRIDGE" | "BRIDGE_CONDUIT_ARROW" | "PHASE_CONDUIT_ARROW" | "BRIDGE_CONDUIT_BRIDGE" | "PLATED_CONDUIT_CAP") {
continue
@@ -72,34 +76,42 @@ fn main() {
macro_rules! writ {
($ext:ident / $scale:literal) => {
let mut buf = File::create(o.join(n.to_string() + "-" + stringify!($ext))).unwrap();
+ // boulders
+ let (mx, my) = if p.width() + p.height() == 48+48 {
+ (32, 32)
+ // vents (dont match VENT_CONDENSER, do match (RHYOLITE_VENT)
+ } else if path.contains("_VENT")
+ // talls
+ || matches!(path.as_str(), "YELLOWCORAL" | "WHITE_TREE" | "WHITE_TREE_DEAD" | "REDWEED" | "SPORE_CLUSTER" | "CRYSTAL_BLOCKS" | "CRYSTAL_CLUSTER" | "VIBRANT_CRYSTAL_CLUSTER" | "CRYSTAL_ORBS") {
+ (32, 32)
+ } else {
+ (p.height(), p.height())
+ };
let new = if $scale == 1 {
p.clone()
} else {
- // boulders
- let (mx, my) = if p.width() + p.height() == 48+48 {
- (32, 32)
- // vents (dont match VENT_CONDENSER, do match (RHYOLITE_VENT)
- } else if path.contains("_VENT")
- // talls
- || matches!(path.as_str(), "YELLOWCORAL" | "WHITE_TREE" | "WHITE_TREE_DEAD" | "REDWEED" | "SPORE_CLUSTER" | "CRYSTAL_BLOCKS" | "CRYSTAL_CLUSTER" | "VIBRANT_CRYSTAL_CLUSTER" | "CRYSTAL_ORBS") {
- (32, 32)
- } else {
- (p.height(), p.height())
- };
- image::imageops::resize(
+ DynamicImage::ImageRgba8(image::imageops::resize(
&p,
mx / $scale,
my / $scale,
image::imageops::Nearest,
- )
+ ))
};
let x = new.width();
let y = new.height();
- buf.write_all(&new.into_raw()).unwrap();
- wr!($ext =>
- r#"pub(crate) static {path}: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked( {x} ) }}, unsafe {{ std::num::NonZeroU32::new_unchecked( {y} ) }}, include_bytes!(concat!(env!("OUT_DIR"), "/{n}-{}")));"#,
- stringify!($ext)
- );
+ if rgb {
+ buf.write_all(&new.into_rgb8().into_raw()).unwrap();
+ wr!($ext =>
+ r#"pub(crate) static {path}: Image<&[u8], 3> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked( {x} ) }}, unsafe {{ std::num::NonZeroU32::new_unchecked( {y} ) }}, include_bytes!(concat!(env!("OUT_DIR"), "/{n}-{}")));"#,
+ stringify!($ext)
+ );
+ } else {
+ buf.write_all(&new.into_rgba8().into_raw()).unwrap();
+ wr!($ext =>
+ r#"pub(crate) static {path}: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked( {x} ) }}, unsafe {{ std::num::NonZeroU32::new_unchecked( {y} ) }}, include_bytes!(concat!(env!("OUT_DIR"), "/{n}-{}")));"#,
+ stringify!($ext)
+ );
+ }
};
}
writ!(full / 1);
diff --git a/src/block/mod.rs b/src/block/mod.rs
index c61f538..c314175 100644
--- a/src/block/mod.rs
+++ b/src/block/mod.rs
@@ -605,14 +605,82 @@ macro_rules! make_register {
$field, BlockLogicEnum::BasicBlock(BasicBlock::new($size, true, &[])), Some(crate::data::renderer::load!($field))
); }
};
+ // floors
+ (impl $field: literal > $size: literal) => {
+ paste::paste! { pub static [<$field:snake:upper>]: Block = Block::new(
+ $field, BlockLogicEnum::BasicBlock(BasicBlock::new($size, true, &[])), Some(crate::data::renderer::load!("empty4"))
+ ); }
+ };
}
// pub(self) use make_register;
make_register! {
- "darksand": 1;
- "sand-floor": 1;
- "yellow-stone": 1;
- "arkyic-stone": 1;
- "carbon-stone": 1;
+ "darksand" > 1;
+ "sand-floor" > 1;
+ "yellow-stone" > 1;
+ "arkyic-stone" > 1;
+ "carbon-stone" > 1;
+ "dacite" > 1;
+ "dirt" > 1;
+ "arkycite-floor" > 1;
+ "basalt" > 1;
+ "ice" > 1;
+ "molten-slag" > 1;
+ "moss" > 1;
+ "mud" > 1;
+ "magmarock" > 1;
+ "grass" > 1;
+ "ice-snow" > 1;
+ "hotrock" > 1;
+ "char" > 1;
+ "snow" > 1;
+ "salt" > 1;
+ "shale" > 1;
+ "metal-floor" > 1;
+ "metal-floor-2" > 1;
+ "metal-floor-3" > 1;
+ "metal-floor-4" > 1;
+ "metal-floor-5" > 1;
+ "dark-panel-1" > 1;
+ "dark-panel-2" > 1;
+ "dark-panel-3" > 1;
+ "dark-panel-4" > 1;
+ "dark-panel-5" > 1;
+ "dark-panel-6" > 1;
+ "darksand-tainted-water" > 1;
+ "darksand-water" > 1;
+ "deep-tainted-water" > 1;
+ "deep-water" > 1;
+ "sand-water" > 1;
+ "shallow-water" > 1;
+ "space" > 1;
+ "stone" > 1;
+ "arkyic-vent" > 1;
+ "beryllic-stone" > 1;
+ "bluemat" > 1;
+ "carbon-vent" > 1;
+ "core-zone" > 1;
+ "crater-stone" > 1;
+ "crystal-floor" > 1;
+ "crystalline-stone" > 1;
+ "crystalline-vent" > 1;
+ "metal-floor-damaged" > 1;
+ "dense-red-stone" > 1;
+ "ferric-craters" > 1; // ferris section
+ "ferric-stone" > 1;
+ "pooled-cryofluid" > 1;
+ "red-ice" > 1;
+ "red-stone-vent" > 1;
+ "red-stone" > 1;
+ "redmat" > 1;
+ "regolith" > 1;
+ "rhyolite-crater" > 1;
+ "rhyolite" > 1;
+ "rough-rhyolite" > 1;
+ "tainted-water" > 1;
+ "tar" > 1;
+ "yellow-stone-plates" > 1;
+ "yellow-stone-vent" > 1;
+ "spore-moss" > 1;
"ore-beryllium": 1;
"ore-copper": 1;
"ore-lead": 1;
@@ -626,84 +694,26 @@ make_register! {
"ore-wall-thorium": 1;
"ore-wall-tungsten": 1;
"graphitic-wall": 1;
- "dacite": 1;
- "dirt": 1;
- "arkycite-floor": 1;
- "basalt": 1;
- "ice": 1;
- "molten-slag": 1;
- "moss": 1;
- "mud": 1;
- "magmarock": 1;
- "grass": 1;
- "ice-snow": 1;
- "hotrock": 1;
- "char": 1;
- "snow": 1;
- "salt": 1;
- "shale": 1;
- "metal-floor": 1;
- "metal-floor-2": 1;
- "metal-floor-3": 1;
- "metal-floor-4": 1;
- "metal-floor-5": 1;
- "dark-panel-1": 1;
- "dark-panel-2": 1;
- "dark-panel-3": 1;
- "dark-panel-4": 1;
- "dark-panel-5": 1;
- "dark-panel-6": 1;
- "darksand-tainted-water": 1;
- "darksand-water": 1;
- "deep-tainted-water": 1;
- "deep-water": 1;
- "sand-water": 1;
- "shallow-water": 1;
- "space": 1;
- "stone": 1;
- "build1": 1;
"boulder": 1;
- "arkyic-vent": 1;
"arkyic-wall": 1;
"beryllic-stone-wall": 1;
- "beryllic-stone": 1;
- "bluemat": 1;
- "carbon-vent": 1;
"carbon-wall": 1;
"cliff": 1;
- "core-zone": 1;
- "crater-stone": 1;
- "crystal-floor": 1;
"crystalline-stone-wall": 1;
- "crystalline-stone": 1;
- "crystalline-vent": 3;
"dacite-wall": 1;
"dark-metal": 1;
- "metal-floor-damaged": 1;
- "dense-red-stone": 1;
"dirt-wall": 1;
"dune-wall": 1;
- "ferric-craters": 1; // ferris section
"ferric-stone-wall": 1;
- "ferric-stone": 1;
"ice-wall": 1;
"pebbles": 1;
"pine": 1;
- "pooled-cryofluid": 1;
"red-diamond-wall": 1;
"red-ice-wall": 1;
- "red-ice": 1;
- "red-stone-vent": 1;
"red-stone-wall": 1;
- "red-stone": 1;
- "redmat": 1;
"regolith-wall": 1;
- "regolith": 1;
- "rhyolite-crater": 1;
- "rhyolite-vent": 1;
+ "rhyolite-vent" > 1;
"rhyolite-wall": 1;
- "rhyolite": 1;
- "rough-rhyolite": 1;
"salt-wall": 1;
"sand-wall": 1;
"shale-wall": 1;
@@ -711,14 +721,9 @@ make_register! {
"snow-pine": 1;
"snow-wall": 1;
"spawn": 1;
- "spore-moss": 1;
"spore-pine": 1;
"spore-wall": 1;
"stone-wall": 1;
- "tainted-water": 1;
- "tar": 1;
- "yellow-stone-plates": 1;
- "yellow-stone-vent": 1;
"yellow-stone-wall": 1;
// props
"yellow-stone-boulder": 1;
@@ -748,6 +753,7 @@ make_register! {
"vibrant-crystal-cluster": 1;
"crystal-orbs": 1;
// end tall
+ "build1": 1;
"build2": 1;
"build3": 1;
"build4": 1;
diff --git a/src/data/map.rs b/src/data/map.rs
index 98d8fac..283007e 100644
--- a/src/data/map.rs
+++ b/src/data/map.rs
@@ -143,7 +143,7 @@ impl<'l> Tile<'l> {
}
#[inline]
- pub(crate) fn floor(&self, s: Scale) -> ImageHolder<4> {
+ pub(crate) fn floor(&self, s: Scale) -> ImageHolder<3> {
lo!(self.floor => [
| "darksand"
| "sand-floor"
@@ -196,10 +196,10 @@ impl<'l> Tile<'l> {
/// Draw the floor of this tile
#[must_use]
- pub fn floor_image(&self, s: Scale) -> ImageHolder<4> {
+ pub fn floor_image(&self, s: Scale) -> ImageHolder<3> {
let mut floor = self.floor(s);
if self.has_ore() {
- unsafe { floor.overlay(&self.ore(s)) };
+ unsafe { floor.borrow_mut().overlay(&self.ore(s).borrow()) };
}
floor
}
diff --git a/src/data/renderer.rs b/src/data/renderer.rs
index d9e1ddc..eff39ed 100644
--- a/src/data/renderer.rs
+++ b/src/data/renderer.rs
@@ -38,13 +38,6 @@ impl std::ops::Mul<u32> for Scale {
#[macro_export]
macro_rules! load {
- ("empty", $scale:expr) => {
- $crate::utils::image::ImageHolder::from(match $scale {
- $crate::data::renderer::Scale::Quarter => &$crate::data::renderer::quar::EMPTY,
- $crate::data::renderer::Scale::Eigth => &$crate::data::renderer::eigh::EMPTY,
- $crate::data::renderer::Scale::Full => &$crate::data::renderer::full::EMPTY,
- }.copy())
- };
($name:literal, $scale:expr) => { paste::paste! {
$crate::utils::image::ImageHolder::from(match $scale {
$crate::data::renderer::Scale::Quarter => &$crate::data::renderer::quar::[<$name:snake:upper>],
@@ -149,10 +142,12 @@ impl Renderable for Schematic<'_> {
// canvas has a shadow
let p2 = unsafe { canvas.pixel(x, y) };
let p = unsafe { bg.pixel_mut(x, y) };
- crate::utils::image::blend(p.try_into().unwrap(), p2);
+ let mut p3 = [p[0], p[1], p[2], 255];
+ crate::utils::image::blend(&mut p3, p2);
+ p.copy_from_slice(&p3[..3]);
}
}
- bg.remove_channel()
+ bg
}
}
diff --git a/src/lib.rs b/src/lib.rs
index 07de878..ff921ed 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -6,6 +6,7 @@
slice_as_chunks,
slice_swap_unchecked,
portable_simd,
+ trace_macros,
let_chains,
effects,
test
diff --git a/src/utils/image/mod.rs b/src/utils/image/mod.rs
index 0ef2c69..44bf77c 100644
--- a/src/utils/image/mod.rs
+++ b/src/utils/image/mod.rs
@@ -49,13 +49,13 @@ macro_rules! assert_unchecked {
}
use assert_unchecked;
-impl RepeatNew for Image<&[u8], 4> {
- type Output = Image<Vec<u8>, 4>;
+impl RepeatNew for Image<&[u8], 3> {
+ type Output = Image<Vec<u8>, 3>;
unsafe 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();
+ let a: &mut Image<&mut [u8], 3> = &mut img.as_mut();
// SAFETY: caller upholds
unsafe { a.overlay_at(self, x * self.width(), y * self.height()) };
}
@@ -303,20 +303,6 @@ impl<const CHANNELS: usize> Image<Vec<u8>, CHANNELS> {
}
}
-impl Image<Vec<u8>, 4> {
- pub fn remove_channel(&mut self) -> Image<Vec<u8>, 3> {
- let mut new = vec![0; self.width() as usize * self.height() as usize * 3];
- for (&[r, g, b, _], [nr, ng, nb]) in self
- .buffer
- .array_chunks::<4>()
- .zip(new.array_chunks_mut::<3>())
- {
- (*nr, *ng, *nb) = (r, g, b);
- }
- Image::new(self.width, self.height, new)
- }
-}
-
impl Image<Vec<u8>, 3> {
#[cfg(feature = "bin")]
pub fn save(&self, f: impl AsRef<std::path::Path>) {
@@ -356,16 +342,6 @@ mod tests {
use super::*;
#[test]
- fn rem_chnl_test() {
- let mut img: Image<_, 4> = Image::alloc(2, 1);
- unsafe { img.set_pixel(1, 0, [255, 165, 0, 241]) };
- assert_eq!(unsafe { img.pixel(1, 0) }, [255, 165, 0, 241]);
- assert_eq!(unsafe { img.pixel(0, 0) }, [0, 0, 0, 0]);
- let img = img.remove_channel();
- assert_eq!(unsafe { img.pixel(1, 0) }, [255, 165, 0]);
- }
-
- #[test]
fn scale() {
let mut from = Image::alloc(6, 6);
unsafe { from.set_pixel(3, 3, [255, 255, 255, 255]) };
diff --git a/src/utils/image/overlay.rs b/src/utils/image/overlay.rs
index 4406a9b..3dba13b 100644
--- a/src/utils/image/overlay.rs
+++ b/src/utils/image/overlay.rs
@@ -79,6 +79,24 @@ impl OverlayAt<Image<&[u8], 4>> for Image<&mut [u8], 3> {
}
}
+impl OverlayAt<Image<&[u8], 3>> for Image<&mut [u8], 3> {
+ unsafe fn overlay_at(&mut self, with: &Image<&[u8], 3>, x: u32, y: u32) -> &mut Self {
+ for j in 0..with.height() {
+ let i_x = j as usize * with.width() as usize * 3
+ ..(j as usize + 1) * with.width() as usize * 3;
+ let o_x = ((j as usize + y as usize) * self.width() as usize + x as usize) * 3
+ ..((j as usize + y as usize) * self.width() as usize
+ + x as usize
+ + with.width() as usize)
+ * 3;
+ let a = unsafe { self.buffer.get_unchecked_mut(o_x) };
+ let b = unsafe { with.buffer.get_unchecked(i_x) };
+ a.copy_from_slice(b);
+ }
+ self
+ }
+}
+
impl Overlay<Image<&[u8], 4>> for Image<&mut [u8], 3> {
unsafe fn overlay(&mut self, with: &Image<&[u8], 4>) -> &mut Self {
unsafe { assert_unchecked!(self.width() == with.width()) };
@@ -135,36 +153,56 @@ mod bench {
use crate::{data::renderer::Scale, load};
#[bench]
+ fn overlay_3on3at(bench: &mut Bencher) {
+ let mut v = vec![0u8; 3 * 64 * 64];
+ let mut a: Image<_, 3> = Image::new(
+ 64.try_into().unwrap(),
+ 64.try_into().unwrap(),
+ v.as_mut_slice(),
+ );
+ let b = load!("darksand", Scale::Eigth);
+ bench.iter(|| unsafe {
+ for x in 0..16 {
+ for y in 0..16 {
+ black_box(a.overlay_at(&b.borrow(), x, y));
+ }
+ }
+ });
+ }
+
+ #[bench]
fn overlay_4on3at(bench: &mut Bencher) {
- let mut v = vec![0u8; 3 * 56 * 56];
+ let mut v = vec![0u8; 3 * 64 * 64];
let mut a: Image<_, 3> = Image::new(
- 56.try_into().unwrap(),
- 56.try_into().unwrap(),
+ 64.try_into().unwrap(),
+ 64.try_into().unwrap(),
v.as_mut_slice(),
);
- let b = load!("interplanetary-accelerator", Scale::Eigth);
+ let b = load!("salt-wall", Scale::Eigth);
bench.iter(|| unsafe {
- black_box(a.overlay_at(&b.borrow(), 0, 0));
- black_box(a.overlay_at(&b.borrow(), 28, 0));
- black_box(a.overlay_at(&b.borrow(), 28, 28));
- black_box(a.overlay_at(&b.borrow(), 0, 28));
+ for x in 0..16 {
+ for y in 0..16 {
+ black_box(a.overlay_at(&b.borrow(), x, y));
+ }
+ }
});
}
#[bench]
fn overlay_4on4at(bench: &mut Bencher) {
- let mut v = vec![0u8; 4 * 56 * 56];
+ let mut v = vec![0u8; 4 * 64 * 64];
let mut a: Image<_, 4> = Image::new(
- 56.try_into().unwrap(),
- 56.try_into().unwrap(),
+ 64.try_into().unwrap(),
+ 64.try_into().unwrap(),
v.as_mut_slice(),
);
- let b = load!("interplanetary-accelerator", Scale::Eigth);
+ let b = load!("salt-wall", Scale::Eigth);
bench.iter(|| unsafe {
- black_box(a.overlay_at(&b.borrow(), 0, 0));
- black_box(a.overlay_at(&b.borrow(), 28, 0));
- black_box(a.overlay_at(&b.borrow(), 28, 28));
- black_box(a.overlay_at(&b.borrow(), 0, 28));
+ for x in 0..16 {
+ for y in 0..16 {
+ black_box(a.overlay_at(&b.borrow(), x, y));
+ }
+ }
});
}
}