mindustry logic execution, map- and schematic- parsing and rendering
-rw-r--r--mindus/Cargo.toml5
-rw-r--r--mindus/src/data/renderer.rs14
-rw-r--r--mindus/src/utils/image/mod.rs37
3 files changed, 5 insertions, 51 deletions
diff --git a/mindus/Cargo.toml b/mindus/Cargo.toml
index b327f36..5477f4a 100644
--- a/mindus/Cargo.toml
+++ b/mindus/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "mindus"
-version = "5.0.7"
+version = "5.0.8"
edition = "2021"
description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)"
authors = [
@@ -25,8 +25,7 @@ bobbin-bits = "0.1"
blurslice = { version = "0.1" }
enum_dispatch = "0.3"
phf = { version = "0.11", features = ["macros"] }
-fimg = { version = "0.4.20", features = ["scale"], default-features = false }
-umath = "0.0.1"
+fimg = { version = "0.4.21", features = ["scale"], default-features = false }
[features]
bin = ["fimg/save"]
diff --git a/mindus/src/data/renderer.rs b/mindus/src/data/renderer.rs
index 32e07b4..ab8554b 100644
--- a/mindus/src/data/renderer.rs
+++ b/mindus/src/data/renderer.rs
@@ -5,6 +5,8 @@ use super::GridPos;
use crate::block::Rotation;
pub(crate) use crate::utils::*;
use crate::Map;
+use fimg::BlendingOverlay;
+
include!(concat!(env!("OUT_DIR"), "/full.rs"));
include!(concat!(env!("OUT_DIR"), "/quar.rs"));
include!(concat!(env!("OUT_DIR"), "/eigh.rs"));
@@ -140,17 +142,7 @@ impl Renderable for Schematic {
unsafe { bg.overlay(&canvas) };
} else {
canvas.as_mut().shadow();
- // this is a slow imageops::overlay style overlay (blending etc)
- for x in 0..canvas.width() {
- for y in 0..canvas.height() {
- // canvas has a shadow
- let p2 = unsafe { canvas.pixel(x, y) };
- let p = unsafe { bg.pixel_mut(x, y) };
- let mut p3 = [p[0], p[1], p[2], 255];
- crate::utils::image::blend(&mut p3, p2);
- p.copy_from_slice(&p3[..3]);
- }
- }
+ unsafe { bg.overlay_blended(&canvas) };
}
bg
}
diff --git a/mindus/src/utils/image/mod.rs b/mindus/src/utils/image/mod.rs
index f82c2b1..6f80a86 100644
--- a/mindus/src/utils/image/mod.rs
+++ b/mindus/src/utils/image/mod.rs
@@ -62,40 +62,3 @@ impl ImageUtils for Image<&mut [u8], 4> {
self
}
}
-use umath::FFloat;
-pub fn blend(bg: &mut [u8; 4], fg: [u8; 4]) {
- if fg[3] == 0 {
- return;
- }
- if fg[3] == 255 {
- *bg = fg;
- return;
- }
- #[allow(clippy::multiple_unsafe_ops_per_block)]
- // SAFETY: no u8 can possibly become INF / NAN
- unsafe {
- let max = FFloat::new(255.0);
- let bg_a = FFloat::new(bg[3] as f32) / max;
- let fg_a = FFloat::new(fg[3] as f32) / max;
- let a = bg_a + fg_a - bg_a * fg_a;
- if a == 0.0 {
- return;
- };
- // could turn it into array::map
- *bg = [
- *(max
- * ((((FFloat::new(fg[0] as f32) / max) * fg_a)
- + ((FFloat::new(bg[0] as f32) / max) * bg_a) * (FFloat::new(1.0) - fg_a))
- / a)) as u8,
- *(max
- * ((((FFloat::new(fg[1] as f32) / max) * fg_a)
- + ((FFloat::new(bg[1] as f32) / max) * bg_a) * (FFloat::new(1.0) - fg_a))
- / a)) as u8,
- *(max
- * ((((FFloat::new(fg[2] as f32) / max) * fg_a)
- + ((FFloat::new(bg[2] as f32) / max) * bg_a) * (FFloat::new(1.0) - fg_a))
- / a)) as u8,
- *(max * a) as u8,
- ]
- }
-}