mindustry logic execution, map- and schematic- parsing and rendering
overlay rgb images
| -rw-r--r-- | assets/blocks/environment/arkyic-vent.png | bin | 946 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/carbon-vent.png | bin | 923 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/crystalline-vent.png | bin | 942 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/pur-bush.png | bin | 287 -> 185 bytes | |||
| -rw-r--r-- | assets/blocks/environment/red-stone-vent.png | bin | 944 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/rhyolite-vent.png | bin | 890 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/yellow-stone-vent.png | bin | 942 -> 0 bytes | |||
| -rw-r--r-- | assets/blocks/environment/yellowcoral.png | bin | 432 -> 317 bytes | |||
| -rw-r--r-- | assets/blocks/floors/arkycite-floor.png (renamed from assets/blocks/environment/arkycite-floor.png) | bin | 175 -> 175 bytes | |||
| -rw-r--r-- | assets/blocks/floors/arkyic-stone.png (renamed from assets/blocks/environment/arkyic-stone.png) | bin | 175 -> 175 bytes | |||
| -rw-r--r-- | assets/blocks/floors/arkyic-vent.png | bin | 0 -> 687 bytes | |||
| -rw-r--r-- | assets/blocks/floors/basalt.png (renamed from assets/blocks/environment/basalt.png) | bin | 155 -> 155 bytes | |||
| -rw-r--r-- | assets/blocks/floors/beryllic-stone.png (renamed from assets/blocks/environment/beryllic-stone.png) | bin | 178 -> 178 bytes | |||
| -rw-r--r-- | assets/blocks/floors/bluemat.png (renamed from assets/blocks/environment/bluemat.png) | bin | 157 -> 157 bytes | |||
| -rw-r--r-- | assets/blocks/floors/carbon-stone.png (renamed from assets/blocks/environment/carbon-stone.png) | bin | 301 -> 301 bytes | |||
| -rw-r--r-- | assets/blocks/floors/carbon-vent.png | bin | 0 -> 688 bytes | |||
| -rw-r--r-- | assets/blocks/floors/char.png (renamed from assets/blocks/environment/char.png) | bin | 221 -> 221 bytes | |||
| -rw-r--r-- | assets/blocks/floors/core-zone.png (renamed from assets/blocks/environment/core-zone.png) | bin | 172 -> 172 bytes | |||
| -rw-r--r-- | assets/blocks/floors/crater-stone.png (renamed from assets/blocks/environment/crater-stone.png) | bin | 213 -> 213 bytes | |||
| -rw-r--r-- | assets/blocks/floors/crystal-floor.png (renamed from assets/blocks/environment/crystal-floor.png) | bin | 180 -> 180 bytes | |||
| -rw-r--r-- | assets/blocks/floors/crystalline-stone.png (renamed from assets/blocks/environment/crystalline-stone.png) | bin | 165 -> 165 bytes | |||
| -rw-r--r-- | assets/blocks/floors/crystalline-vent.png | bin | 0 -> 684 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dacite.png (renamed from assets/blocks/environment/dacite.png) | bin | 172 -> 172 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dark-panel-1.png (renamed from assets/blocks/environment/dark-panel-1.png) | bin | 187 -> 187 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dark-panel-2.png (renamed from assets/blocks/environment/dark-panel-2.png) | bin | 227 -> 227 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dark-panel-3.png (renamed from assets/blocks/environment/dark-panel-3.png) | bin | 158 -> 158 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dark-panel-4.png (renamed from assets/blocks/environment/dark-panel-4.png) | bin | 210 -> 210 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dark-panel-5.png (renamed from assets/blocks/environment/dark-panel-5.png) | bin | 196 -> 196 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dark-panel-6.png (renamed from assets/blocks/environment/dark-panel-6.png) | bin | 174 -> 174 bytes | |||
| -rw-r--r-- | assets/blocks/floors/darksand-tainted-water.png (renamed from assets/blocks/environment/darksand-tainted-water.png) | bin | 313 -> 313 bytes | |||
| -rw-r--r-- | assets/blocks/floors/darksand-water.png (renamed from assets/blocks/environment/darksand-water.png) | bin | 313 -> 313 bytes | |||
| -rw-r--r-- | assets/blocks/floors/darksand.png (renamed from assets/blocks/environment/darksand.png) | bin | 157 -> 157 bytes | |||
| -rw-r--r-- | assets/blocks/floors/deep-tainted-water.png (renamed from assets/blocks/environment/deep-tainted-water.png) | bin | 172 -> 172 bytes | |||
| -rw-r--r-- | assets/blocks/floors/deep-water.png (renamed from assets/blocks/environment/deep-water.png) | bin | 172 -> 172 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dense-red-stone.png (renamed from assets/blocks/environment/dense-red-stone.png) | bin | 200 -> 200 bytes | |||
| -rw-r--r-- | assets/blocks/floors/dirt.png (renamed from assets/blocks/environment/dirt.png) | bin | 143 -> 143 bytes | |||
| -rw-r--r-- | assets/blocks/floors/ferric-craters.png (renamed from assets/blocks/environment/ferric-craters.png) | bin | 216 -> 216 bytes | |||
| -rw-r--r-- | assets/blocks/floors/ferric-stone.png (renamed from assets/blocks/environment/ferric-stone.png) | bin | 154 -> 154 bytes | |||
| -rw-r--r-- | assets/blocks/floors/grass.png (renamed from assets/blocks/environment/grass.png) | bin | 152 -> 152 bytes | |||
| -rw-r--r-- | assets/blocks/floors/hotrock.png (renamed from assets/blocks/environment/hotrock.png) | bin | 225 -> 225 bytes | |||
| -rw-r--r-- | assets/blocks/floors/ice-snow.png (renamed from assets/blocks/environment/ice-snow.png) | bin | 363 -> 363 bytes | |||
| -rw-r--r-- | assets/blocks/floors/ice.png (renamed from assets/blocks/environment/ice.png) | bin | 184 -> 184 bytes | |||
| -rw-r--r-- | assets/blocks/floors/magmarock.png (renamed from assets/blocks/environment/magmarock.png) | bin | 262 -> 262 bytes | |||
| -rw-r--r-- | assets/blocks/floors/metal-floor-2.png (renamed from assets/blocks/environment/metal-floor-2.png) | bin | 131 -> 131 bytes | |||
| -rw-r--r-- | assets/blocks/floors/metal-floor-3.png (renamed from assets/blocks/environment/metal-floor-3.png) | bin | 150 -> 150 bytes | |||
| -rw-r--r-- | assets/blocks/floors/metal-floor-4.png (renamed from assets/blocks/environment/metal-floor-4.png) | bin | 184 -> 184 bytes | |||
| -rw-r--r-- | assets/blocks/floors/metal-floor-5.png (renamed from assets/blocks/environment/metal-floor-5.png) | bin | 162 -> 162 bytes | |||
| -rw-r--r-- | assets/blocks/floors/metal-floor-damaged.png (renamed from assets/blocks/environment/metal-floor-damaged.png) | bin | 216 -> 216 bytes | |||
| -rw-r--r-- | assets/blocks/floors/metal-floor.png (renamed from assets/blocks/environment/metal-floor.png) | bin | 175 -> 175 bytes | |||
| -rw-r--r-- | assets/blocks/floors/molten-slag.png (renamed from assets/blocks/environment/molten-slag.png) | bin | 1279 -> 1279 bytes | |||
| -rw-r--r-- | assets/blocks/floors/moss.png (renamed from assets/blocks/environment/moss.png) | bin | 167 -> 167 bytes | |||
| -rw-r--r-- | assets/blocks/floors/mud.png (renamed from assets/blocks/environment/mud.png) | bin | 1297 -> 1297 bytes | |||
| -rw-r--r-- | assets/blocks/floors/pooled-cryofluid.png (renamed from assets/blocks/environment/pooled-cryofluid.png) | bin | 1311 -> 1311 bytes | |||
| -rw-r--r-- | assets/blocks/floors/red-ice.png (renamed from assets/blocks/environment/red-ice.png) | bin | 200 -> 200 bytes | |||
| -rw-r--r-- | assets/blocks/floors/red-stone-vent.png | bin | 0 -> 684 bytes | |||
| -rw-r--r-- | assets/blocks/floors/red-stone.png (renamed from assets/blocks/environment/red-stone.png) | bin | 181 -> 181 bytes | |||
| -rw-r--r-- | assets/blocks/floors/redmat.png (renamed from assets/blocks/environment/redmat.png) | bin | 159 -> 159 bytes | |||
| -rw-r--r-- | assets/blocks/floors/regolith.png (renamed from assets/blocks/environment/regolith.png) | bin | 164 -> 164 bytes | |||
| -rw-r--r-- | assets/blocks/floors/rhyolite-crater.png (renamed from assets/blocks/environment/rhyolite-crater.png) | bin | 607 -> 607 bytes | |||
| -rw-r--r-- | assets/blocks/floors/rhyolite-vent.png | bin | 0 -> 662 bytes | |||
| -rw-r--r-- | assets/blocks/floors/rhyolite.png (renamed from assets/blocks/environment/rhyolite.png) | bin | 576 -> 576 bytes | |||
| -rw-r--r-- | assets/blocks/floors/rough-rhyolite.png (renamed from assets/blocks/environment/rough-rhyolite.png) | bin | 163 -> 163 bytes | |||
| -rw-r--r-- | assets/blocks/floors/salt.png (renamed from assets/blocks/environment/salt.png) | bin | 186 -> 186 bytes | |||
| -rw-r--r-- | assets/blocks/floors/sand-floor.png (renamed from assets/blocks/environment/sand-floor.png) | bin | 156 -> 156 bytes | |||
| -rw-r--r-- | assets/blocks/floors/sand-water.png (renamed from assets/blocks/environment/sand-water.png) | bin | 314 -> 314 bytes | |||
| -rw-r--r-- | assets/blocks/floors/shale.png (renamed from assets/blocks/environment/shale.png) | bin | 175 -> 175 bytes | |||
| -rw-r--r-- | assets/blocks/floors/shallow-water.png (renamed from assets/blocks/environment/shallow-water.png) | bin | 172 -> 172 bytes | |||
| -rw-r--r-- | assets/blocks/floors/snow.png (renamed from assets/blocks/environment/snow.png) | bin | 189 -> 189 bytes | |||
| -rw-r--r-- | assets/blocks/floors/space.png (renamed from assets/blocks/environment/space.png) | bin | 96 -> 96 bytes | |||
| -rw-r--r-- | assets/blocks/floors/spore-moss.png (renamed from assets/blocks/environment/spore-moss.png) | bin | 211 -> 211 bytes | |||
| -rw-r--r-- | assets/blocks/floors/stone.png (renamed from assets/blocks/environment/stone.png) | bin | 154 -> 154 bytes | |||
| -rw-r--r-- | assets/blocks/floors/tainted-water.png (renamed from assets/blocks/environment/tainted-water.png) | bin | 172 -> 172 bytes | |||
| -rw-r--r-- | assets/blocks/floors/tar.png (renamed from assets/blocks/environment/tar.png) | bin | 96 -> 96 bytes | |||
| -rw-r--r-- | assets/blocks/floors/yellow-stone-plates.png (renamed from assets/blocks/environment/yellow-stone-plates.png) | bin | 179 -> 179 bytes | |||
| -rw-r--r-- | assets/blocks/floors/yellow-stone-vent.png | bin | 0 -> 692 bytes | |||
| -rw-r--r-- | assets/blocks/floors/yellow-stone.png (renamed from assets/blocks/environment/yellow-stone.png) | bin | 153 -> 153 bytes | |||
| -rw-r--r-- | build.rs | 60 | ||||
| -rw-r--r-- | src/block/mod.rs | 144 | ||||
| -rw-r--r-- | src/data/map.rs | 6 | ||||
| -rw-r--r-- | src/data/renderer.rs | 13 | ||||
| -rw-r--r-- | src/lib.rs | 1 | ||||
| -rw-r--r-- | src/utils/image/mod.rs | 30 | ||||
| -rw-r--r-- | src/utils/image/overlay.rs | 70 |
83 files changed, 176 insertions, 148 deletions
diff --git a/assets/blocks/environment/arkyic-vent.png b/assets/blocks/environment/arkyic-vent.png Binary files differdeleted file mode 100644 index f67cbe3..0000000 --- a/assets/blocks/environment/arkyic-vent.png +++ /dev/null diff --git a/assets/blocks/environment/carbon-vent.png b/assets/blocks/environment/carbon-vent.png Binary files differdeleted file mode 100644 index d3e2570..0000000 --- a/assets/blocks/environment/carbon-vent.png +++ /dev/null diff --git a/assets/blocks/environment/crystalline-vent.png b/assets/blocks/environment/crystalline-vent.png Binary files differdeleted file mode 100644 index 2de8864..0000000 --- a/assets/blocks/environment/crystalline-vent.png +++ /dev/null diff --git a/assets/blocks/environment/pur-bush.png b/assets/blocks/environment/pur-bush.png Binary files differindex 24fee97..7dc9315 100644 --- a/assets/blocks/environment/pur-bush.png +++ b/assets/blocks/environment/pur-bush.png diff --git a/assets/blocks/environment/red-stone-vent.png b/assets/blocks/environment/red-stone-vent.png Binary files differdeleted file mode 100644 index b71ab18..0000000 --- a/assets/blocks/environment/red-stone-vent.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite-vent.png b/assets/blocks/environment/rhyolite-vent.png Binary files differdeleted file mode 100644 index d7b7ed0..0000000 --- a/assets/blocks/environment/rhyolite-vent.png +++ /dev/null diff --git a/assets/blocks/environment/yellow-stone-vent.png b/assets/blocks/environment/yellow-stone-vent.png Binary files differdeleted file mode 100644 index effb1ca..0000000 --- a/assets/blocks/environment/yellow-stone-vent.png +++ /dev/null diff --git a/assets/blocks/environment/yellowcoral.png b/assets/blocks/environment/yellowcoral.png Binary files differindex 5e3d6cc..21c6960 100644 --- a/assets/blocks/environment/yellowcoral.png +++ b/assets/blocks/environment/yellowcoral.png diff --git a/assets/blocks/environment/arkycite-floor.png b/assets/blocks/floors/arkycite-floor.png Binary files differindex 5ae0096..5ae0096 100644 --- a/assets/blocks/environment/arkycite-floor.png +++ b/assets/blocks/floors/arkycite-floor.png diff --git a/assets/blocks/environment/arkyic-stone.png b/assets/blocks/floors/arkyic-stone.png Binary files differindex 5f396a8..5f396a8 100644 --- a/assets/blocks/environment/arkyic-stone.png +++ b/assets/blocks/floors/arkyic-stone.png diff --git a/assets/blocks/floors/arkyic-vent.png b/assets/blocks/floors/arkyic-vent.png Binary files differnew file mode 100644 index 0000000..8dd5a87 --- /dev/null +++ b/assets/blocks/floors/arkyic-vent.png diff --git a/assets/blocks/environment/basalt.png b/assets/blocks/floors/basalt.png Binary files differindex 93ee858..93ee858 100644 --- a/assets/blocks/environment/basalt.png +++ b/assets/blocks/floors/basalt.png diff --git a/assets/blocks/environment/beryllic-stone.png b/assets/blocks/floors/beryllic-stone.png Binary files differindex 6a6720a..6a6720a 100644 --- a/assets/blocks/environment/beryllic-stone.png +++ b/assets/blocks/floors/beryllic-stone.png diff --git a/assets/blocks/environment/bluemat.png b/assets/blocks/floors/bluemat.png Binary files differindex e15530a..e15530a 100644 --- a/assets/blocks/environment/bluemat.png +++ b/assets/blocks/floors/bluemat.png diff --git a/assets/blocks/environment/carbon-stone.png b/assets/blocks/floors/carbon-stone.png Binary files differindex 76bde92..76bde92 100644 --- a/assets/blocks/environment/carbon-stone.png +++ b/assets/blocks/floors/carbon-stone.png diff --git a/assets/blocks/floors/carbon-vent.png b/assets/blocks/floors/carbon-vent.png Binary files differnew file mode 100644 index 0000000..f5d0fb5 --- /dev/null +++ b/assets/blocks/floors/carbon-vent.png diff --git a/assets/blocks/environment/char.png b/assets/blocks/floors/char.png Binary files differindex c6340ed..c6340ed 100644 --- a/assets/blocks/environment/char.png +++ b/assets/blocks/floors/char.png diff --git a/assets/blocks/environment/core-zone.png b/assets/blocks/floors/core-zone.png Binary files differindex 0a7bf40..0a7bf40 100644 --- a/assets/blocks/environment/core-zone.png +++ b/assets/blocks/floors/core-zone.png diff --git a/assets/blocks/environment/crater-stone.png b/assets/blocks/floors/crater-stone.png Binary files differindex 9cfc92f..9cfc92f 100644 --- a/assets/blocks/environment/crater-stone.png +++ b/assets/blocks/floors/crater-stone.png diff --git a/assets/blocks/environment/crystal-floor.png b/assets/blocks/floors/crystal-floor.png Binary files differindex 4ff6b86..4ff6b86 100644 --- a/assets/blocks/environment/crystal-floor.png +++ b/assets/blocks/floors/crystal-floor.png diff --git a/assets/blocks/environment/crystalline-stone.png b/assets/blocks/floors/crystalline-stone.png Binary files differindex 01fe740..01fe740 100644 --- a/assets/blocks/environment/crystalline-stone.png +++ b/assets/blocks/floors/crystalline-stone.png diff --git a/assets/blocks/floors/crystalline-vent.png b/assets/blocks/floors/crystalline-vent.png Binary files differnew file mode 100644 index 0000000..0538346 --- /dev/null +++ b/assets/blocks/floors/crystalline-vent.png diff --git a/assets/blocks/environment/dacite.png b/assets/blocks/floors/dacite.png Binary files differindex 470473a..470473a 100644 --- a/assets/blocks/environment/dacite.png +++ b/assets/blocks/floors/dacite.png diff --git a/assets/blocks/environment/dark-panel-1.png b/assets/blocks/floors/dark-panel-1.png Binary files differindex 04e6b15..04e6b15 100644 --- a/assets/blocks/environment/dark-panel-1.png +++ b/assets/blocks/floors/dark-panel-1.png diff --git a/assets/blocks/environment/dark-panel-2.png b/assets/blocks/floors/dark-panel-2.png Binary files differindex adbc44f..adbc44f 100644 --- a/assets/blocks/environment/dark-panel-2.png +++ b/assets/blocks/floors/dark-panel-2.png diff --git a/assets/blocks/environment/dark-panel-3.png b/assets/blocks/floors/dark-panel-3.png Binary files differindex 7a3c38e..7a3c38e 100644 --- a/assets/blocks/environment/dark-panel-3.png +++ b/assets/blocks/floors/dark-panel-3.png diff --git a/assets/blocks/environment/dark-panel-4.png b/assets/blocks/floors/dark-panel-4.png Binary files differindex 3030229..3030229 100644 --- a/assets/blocks/environment/dark-panel-4.png +++ b/assets/blocks/floors/dark-panel-4.png diff --git a/assets/blocks/environment/dark-panel-5.png b/assets/blocks/floors/dark-panel-5.png Binary files differindex c956695..c956695 100644 --- a/assets/blocks/environment/dark-panel-5.png +++ b/assets/blocks/floors/dark-panel-5.png diff --git a/assets/blocks/environment/dark-panel-6.png b/assets/blocks/floors/dark-panel-6.png Binary files differindex d7d3ba2..d7d3ba2 100644 --- a/assets/blocks/environment/dark-panel-6.png +++ b/assets/blocks/floors/dark-panel-6.png diff --git a/assets/blocks/environment/darksand-tainted-water.png b/assets/blocks/floors/darksand-tainted-water.png Binary files differindex 7f74cca..7f74cca 100644 --- a/assets/blocks/environment/darksand-tainted-water.png +++ b/assets/blocks/floors/darksand-tainted-water.png diff --git a/assets/blocks/environment/darksand-water.png b/assets/blocks/floors/darksand-water.png Binary files differindex 61c769d..61c769d 100644 --- a/assets/blocks/environment/darksand-water.png +++ b/assets/blocks/floors/darksand-water.png diff --git a/assets/blocks/environment/darksand.png b/assets/blocks/floors/darksand.png Binary files differindex ef61797..ef61797 100644 --- a/assets/blocks/environment/darksand.png +++ b/assets/blocks/floors/darksand.png diff --git a/assets/blocks/environment/deep-tainted-water.png b/assets/blocks/floors/deep-tainted-water.png Binary files differindex e06ab6a..e06ab6a 100644 --- a/assets/blocks/environment/deep-tainted-water.png +++ b/assets/blocks/floors/deep-tainted-water.png diff --git a/assets/blocks/environment/deep-water.png b/assets/blocks/floors/deep-water.png Binary files differindex ff4ee69..ff4ee69 100644 --- a/assets/blocks/environment/deep-water.png +++ b/assets/blocks/floors/deep-water.png diff --git a/assets/blocks/environment/dense-red-stone.png b/assets/blocks/floors/dense-red-stone.png Binary files differindex 40d1694..40d1694 100644 --- a/assets/blocks/environment/dense-red-stone.png +++ b/assets/blocks/floors/dense-red-stone.png diff --git a/assets/blocks/environment/dirt.png b/assets/blocks/floors/dirt.png Binary files differindex 1f2b788..1f2b788 100644 --- a/assets/blocks/environment/dirt.png +++ b/assets/blocks/floors/dirt.png diff --git a/assets/blocks/environment/ferric-craters.png b/assets/blocks/floors/ferric-craters.png Binary files differindex 83155f5..83155f5 100644 --- a/assets/blocks/environment/ferric-craters.png +++ b/assets/blocks/floors/ferric-craters.png diff --git a/assets/blocks/environment/ferric-stone.png b/assets/blocks/floors/ferric-stone.png Binary files differindex 2dabf3d..2dabf3d 100644 --- a/assets/blocks/environment/ferric-stone.png +++ b/assets/blocks/floors/ferric-stone.png diff --git a/assets/blocks/environment/grass.png b/assets/blocks/floors/grass.png Binary files differindex 662dc7b..662dc7b 100644 --- a/assets/blocks/environment/grass.png +++ b/assets/blocks/floors/grass.png diff --git a/assets/blocks/environment/hotrock.png b/assets/blocks/floors/hotrock.png Binary files differindex 1aa6bb3..1aa6bb3 100644 --- a/assets/blocks/environment/hotrock.png +++ b/assets/blocks/floors/hotrock.png diff --git a/assets/blocks/environment/ice-snow.png b/assets/blocks/floors/ice-snow.png Binary files differindex 3711749..3711749 100644 --- a/assets/blocks/environment/ice-snow.png +++ b/assets/blocks/floors/ice-snow.png diff --git a/assets/blocks/environment/ice.png b/assets/blocks/floors/ice.png Binary files differindex 664678d..664678d 100644 --- a/assets/blocks/environment/ice.png +++ b/assets/blocks/floors/ice.png diff --git a/assets/blocks/environment/magmarock.png b/assets/blocks/floors/magmarock.png Binary files differindex 45626c1..45626c1 100644 --- a/assets/blocks/environment/magmarock.png +++ b/assets/blocks/floors/magmarock.png diff --git a/assets/blocks/environment/metal-floor-2.png b/assets/blocks/floors/metal-floor-2.png Binary files differindex 4b0569e..4b0569e 100644 --- a/assets/blocks/environment/metal-floor-2.png +++ b/assets/blocks/floors/metal-floor-2.png diff --git a/assets/blocks/environment/metal-floor-3.png b/assets/blocks/floors/metal-floor-3.png Binary files differindex 38ecedb..38ecedb 100644 --- a/assets/blocks/environment/metal-floor-3.png +++ b/assets/blocks/floors/metal-floor-3.png diff --git a/assets/blocks/environment/metal-floor-4.png b/assets/blocks/floors/metal-floor-4.png Binary files differindex 6c17203..6c17203 100644 --- a/assets/blocks/environment/metal-floor-4.png +++ b/assets/blocks/floors/metal-floor-4.png diff --git a/assets/blocks/environment/metal-floor-5.png b/assets/blocks/floors/metal-floor-5.png Binary files differindex ae13ed0..ae13ed0 100644 --- a/assets/blocks/environment/metal-floor-5.png +++ b/assets/blocks/floors/metal-floor-5.png diff --git a/assets/blocks/environment/metal-floor-damaged.png b/assets/blocks/floors/metal-floor-damaged.png Binary files differindex 5f60992..5f60992 100644 --- a/assets/blocks/environment/metal-floor-damaged.png +++ b/assets/blocks/floors/metal-floor-damaged.png diff --git a/assets/blocks/environment/metal-floor.png b/assets/blocks/floors/metal-floor.png Binary files differindex c8483c7..c8483c7 100644 --- a/assets/blocks/environment/metal-floor.png +++ b/assets/blocks/floors/metal-floor.png diff --git a/assets/blocks/environment/molten-slag.png b/assets/blocks/floors/molten-slag.png Binary files differindex 1d41627..1d41627 100644 --- a/assets/blocks/environment/molten-slag.png +++ b/assets/blocks/floors/molten-slag.png diff --git a/assets/blocks/environment/moss.png b/assets/blocks/floors/moss.png Binary files differindex a835175..a835175 100644 --- a/assets/blocks/environment/moss.png +++ b/assets/blocks/floors/moss.png diff --git a/assets/blocks/environment/mud.png b/assets/blocks/floors/mud.png Binary files differindex 834c1ee..834c1ee 100644 --- a/assets/blocks/environment/mud.png +++ b/assets/blocks/floors/mud.png diff --git a/assets/blocks/environment/pooled-cryofluid.png b/assets/blocks/floors/pooled-cryofluid.png Binary files differindex aa36067..aa36067 100644 --- a/assets/blocks/environment/pooled-cryofluid.png +++ b/assets/blocks/floors/pooled-cryofluid.png diff --git a/assets/blocks/environment/red-ice.png b/assets/blocks/floors/red-ice.png Binary files differindex d54cf8a..d54cf8a 100644 --- a/assets/blocks/environment/red-ice.png +++ b/assets/blocks/floors/red-ice.png diff --git a/assets/blocks/floors/red-stone-vent.png b/assets/blocks/floors/red-stone-vent.png Binary files differnew file mode 100644 index 0000000..d579eea --- /dev/null +++ b/assets/blocks/floors/red-stone-vent.png diff --git a/assets/blocks/environment/red-stone.png b/assets/blocks/floors/red-stone.png Binary files differindex 66e5b06..66e5b06 100644 --- a/assets/blocks/environment/red-stone.png +++ b/assets/blocks/floors/red-stone.png diff --git a/assets/blocks/environment/redmat.png b/assets/blocks/floors/redmat.png Binary files differindex f9df183..f9df183 100644 --- a/assets/blocks/environment/redmat.png +++ b/assets/blocks/floors/redmat.png diff --git a/assets/blocks/environment/regolith.png b/assets/blocks/floors/regolith.png Binary files differindex cb318b5..cb318b5 100644 --- a/assets/blocks/environment/regolith.png +++ b/assets/blocks/floors/regolith.png diff --git a/assets/blocks/environment/rhyolite-crater.png b/assets/blocks/floors/rhyolite-crater.png Binary files differindex e35a1b3..e35a1b3 100644 --- a/assets/blocks/environment/rhyolite-crater.png +++ b/assets/blocks/floors/rhyolite-crater.png diff --git a/assets/blocks/floors/rhyolite-vent.png b/assets/blocks/floors/rhyolite-vent.png Binary files differnew file mode 100644 index 0000000..5996ae7 --- /dev/null +++ b/assets/blocks/floors/rhyolite-vent.png diff --git a/assets/blocks/environment/rhyolite.png b/assets/blocks/floors/rhyolite.png Binary files differindex 37fba67..37fba67 100644 --- a/assets/blocks/environment/rhyolite.png +++ b/assets/blocks/floors/rhyolite.png diff --git a/assets/blocks/environment/rough-rhyolite.png b/assets/blocks/floors/rough-rhyolite.png Binary files differindex 9700fff..9700fff 100644 --- a/assets/blocks/environment/rough-rhyolite.png +++ b/assets/blocks/floors/rough-rhyolite.png diff --git a/assets/blocks/environment/salt.png b/assets/blocks/floors/salt.png Binary files differindex a693c13..a693c13 100644 --- a/assets/blocks/environment/salt.png +++ b/assets/blocks/floors/salt.png diff --git a/assets/blocks/environment/sand-floor.png b/assets/blocks/floors/sand-floor.png Binary files differindex 9c5f4e9..9c5f4e9 100644 --- a/assets/blocks/environment/sand-floor.png +++ b/assets/blocks/floors/sand-floor.png diff --git a/assets/blocks/environment/sand-water.png b/assets/blocks/floors/sand-water.png Binary files differindex 0ff663c..0ff663c 100644 --- a/assets/blocks/environment/sand-water.png +++ b/assets/blocks/floors/sand-water.png diff --git a/assets/blocks/environment/shale.png b/assets/blocks/floors/shale.png Binary files differindex a0469bc..a0469bc 100644 --- a/assets/blocks/environment/shale.png +++ b/assets/blocks/floors/shale.png diff --git a/assets/blocks/environment/shallow-water.png b/assets/blocks/floors/shallow-water.png Binary files differindex 16dc4d0..16dc4d0 100644 --- a/assets/blocks/environment/shallow-water.png +++ b/assets/blocks/floors/shallow-water.png diff --git a/assets/blocks/environment/snow.png b/assets/blocks/floors/snow.png Binary files differindex afad902..afad902 100644 --- a/assets/blocks/environment/snow.png +++ b/assets/blocks/floors/snow.png diff --git a/assets/blocks/environment/space.png b/assets/blocks/floors/space.png Binary files differindex bccf464..bccf464 100644 --- a/assets/blocks/environment/space.png +++ b/assets/blocks/floors/space.png diff --git a/assets/blocks/environment/spore-moss.png b/assets/blocks/floors/spore-moss.png Binary files differindex 3661e8b..3661e8b 100644 --- a/assets/blocks/environment/spore-moss.png +++ b/assets/blocks/floors/spore-moss.png diff --git a/assets/blocks/environment/stone.png b/assets/blocks/floors/stone.png Binary files differindex 9fdeff0..9fdeff0 100644 --- a/assets/blocks/environment/stone.png +++ b/assets/blocks/floors/stone.png diff --git a/assets/blocks/environment/tainted-water.png b/assets/blocks/floors/tainted-water.png Binary files differindex 244610a..244610a 100644 --- a/assets/blocks/environment/tainted-water.png +++ b/assets/blocks/floors/tainted-water.png diff --git a/assets/blocks/environment/tar.png b/assets/blocks/floors/tar.png Binary files differindex a9bafc3..a9bafc3 100644 --- a/assets/blocks/environment/tar.png +++ b/assets/blocks/floors/tar.png diff --git a/assets/blocks/environment/yellow-stone-plates.png b/assets/blocks/floors/yellow-stone-plates.png Binary files differindex 9f8a04b..9f8a04b 100644 --- a/assets/blocks/environment/yellow-stone-plates.png +++ b/assets/blocks/floors/yellow-stone-plates.png diff --git a/assets/blocks/floors/yellow-stone-vent.png b/assets/blocks/floors/yellow-stone-vent.png Binary files differnew file mode 100644 index 0000000..35d39e6 --- /dev/null +++ b/assets/blocks/floors/yellow-stone-vent.png diff --git a/assets/blocks/environment/yellow-stone.png b/assets/blocks/floors/yellow-stone.png Binary files differindex fb0c640..fb0c640 100644 --- a/assets/blocks/environment/yellow-stone.png +++ b/assets/blocks/floors/yellow-stone.png @@ -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 } } @@ -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)); + } + } }); } } |