diff --git a/crates/console/prometeu-drivers/src/asset.rs b/crates/console/prometeu-drivers/src/asset.rs index 52d31d51..6e67a941 100644 --- a/crates/console/prometeu-drivers/src/asset.rs +++ b/crates/console/prometeu-drivers/src/asset.rs @@ -1395,9 +1395,9 @@ mod tests { assert_eq!(decoded.layers[1].glyph_asset_id, 101); assert_eq!(decoded.layers[1].parallax_factor.x, 0.5); assert_eq!(decoded.layers[2].tile_size, TileSize::Size32); - assert_eq!(decoded.layers[0].tilemap.tiles[1].flip_x, true); - assert_eq!(decoded.layers[2].tilemap.tiles[2].flip_y, true); - assert_eq!(decoded.layers[3].active, false); + assert!(decoded.layers[0].tilemap.tiles[1].flip_x); + assert!(decoded.layers[2].tilemap.tiles[2].flip_y); + assert!(!decoded.layers[3].active); } #[test] diff --git a/crates/console/prometeu-drivers/src/gfx.rs b/crates/console/prometeu-drivers/src/gfx.rs index 54689adb..b74176f6 100644 --- a/crates/console/prometeu-drivers/src/gfx.rs +++ b/crates/console/prometeu-drivers/src/gfx.rs @@ -660,7 +660,9 @@ impl Gfx { self.back.fill(Color::BLACK.raw()); self.populate_layer_buckets(); - for layer_index in 0..cache.layers.len() { + for (layer_index, glyph_slot) in + resolved_glyph_slots.iter().enumerate().take(cache.layers.len()) + { Self::draw_bucket_on_buffer( &mut self.back, self.w, @@ -675,7 +677,7 @@ impl Gfx { self.h, cache, &update.copy_requests[layer_index], - resolved_glyph_slots[layer_index], + *glyph_slot, &*self.glyph_banks, ); } @@ -906,6 +908,56 @@ impl Gfx { } } +/// Blends in RGB565 per channel with saturation. +/// `dst` and `src` are RGB565 pixels (u16). +fn blend_rgb565(dst: u16, src: u16, mode: BlendMode) -> u16 { + match mode { + BlendMode::None => src, + + BlendMode::Half => { + let (dr, dg, db) = Color::unpack_to_native(dst); + let (sr, sg, sb) = Color::unpack_to_native(src); + let r = ((dr as u16 + sr as u16) >> 1) as u8; + let g = ((dg as u16 + sg as u16) >> 1) as u8; + let b = ((db as u16 + sb as u16) >> 1) as u8; + Color::pack_from_native(r, g, b) + } + + BlendMode::HalfPlus => { + let (dr, dg, db) = Color::unpack_to_native(dst); + let (sr, sg, sb) = Color::unpack_to_native(src); + + let r = (dr as u16 + ((sr as u16) >> 1)).min(31) as u8; + let g = (dg as u16 + ((sg as u16) >> 1)).min(63) as u8; + let b = (db as u16 + ((sb as u16) >> 1)).min(31) as u8; + + Color::pack_from_native(r, g, b) + } + + BlendMode::HalfMinus => { + let (dr, dg, db) = Color::unpack_to_native(dst); + let (sr, sg, sb) = Color::unpack_to_native(src); + + let r = (dr as i16 - ((sr as i16) >> 1)).max(0) as u8; + let g = (dg as i16 - ((sg as i16) >> 1)).max(0) as u8; + let b = (db as i16 - ((sb as i16) >> 1)).max(0) as u8; + + Color::pack_from_native(r, g, b) + } + + BlendMode::Full => { + let (dr, dg, db) = Color::unpack_to_native(dst); + let (sr, sg, sb) = Color::unpack_to_native(src); + + let r = (dr as u16 + sr as u16).min(31) as u8; + let g = (dg as u16 + sg as u16).min(63) as u8; + let b = (db as u16 + sb as u16).min(31) as u8; + + Color::pack_from_native(r, g, b) + } + } +} + #[cfg(test)] mod tests { use super::*; @@ -1055,9 +1107,7 @@ mod tests { gfx.begin_overlay_frame(); gfx.draw_square(2, 2, 6, 6, Color::WHITE, Color::BLACK); gfx.drain_overlay_debug(); - // Border assert_eq!(gfx.back[2 * 10 + 2], Color::WHITE.0); - // Fill assert_eq!(gfx.back[3 * 10 + 3], Color::BLACK.0); assert_eq!(gfx.overlay().command_count(), 0); } @@ -1220,53 +1270,3 @@ mod tests { assert_eq!(gfx.sprites[1].glyph.glyph_id, 5); } } - -/// Blends in RGB565 per channel with saturation. -/// `dst` and `src` are RGB565 pixels (u16). -fn blend_rgb565(dst: u16, src: u16, mode: BlendMode) -> u16 { - match mode { - BlendMode::None => src, - - BlendMode::Half => { - let (dr, dg, db) = Color::unpack_to_native(dst); - let (sr, sg, sb) = Color::unpack_to_native(src); - let r = ((dr as u16 + sr as u16) >> 1) as u8; - let g = ((dg as u16 + sg as u16) >> 1) as u8; - let b = ((db as u16 + sb as u16) >> 1) as u8; - Color::pack_from_native(r, g, b) - } - - BlendMode::HalfPlus => { - let (dr, dg, db) = Color::unpack_to_native(dst); - let (sr, sg, sb) = Color::unpack_to_native(src); - - let r = (dr as u16 + ((sr as u16) >> 1)).min(31) as u8; - let g = (dg as u16 + ((sg as u16) >> 1)).min(63) as u8; - let b = (db as u16 + ((sb as u16) >> 1)).min(31) as u8; - - Color::pack_from_native(r, g, b) - } - - BlendMode::HalfMinus => { - let (dr, dg, db) = Color::unpack_to_native(dst); - let (sr, sg, sb) = Color::unpack_to_native(src); - - let r = (dr as i16 - ((sr as i16) >> 1)).max(0) as u8; - let g = (dg as i16 - ((sg as i16) >> 1)).max(0) as u8; - let b = (db as i16 - ((sb as i16) >> 1)).max(0) as u8; - - Color::pack_from_native(r, g, b) - } - - BlendMode::Full => { - let (dr, dg, db) = Color::unpack_to_native(dst); - let (sr, sg, sb) = Color::unpack_to_native(src); - - let r = (dr as u16 + sr as u16).min(31) as u8; - let g = (dg as u16 + sg as u16).min(63) as u8; - let b = (db as u16 + sb as u16).min(31) as u8; - - Color::pack_from_native(r, g, b) - } - } -} diff --git a/crates/host/prometeu-host-desktop-winit/src/audio.rs b/crates/host/prometeu-host-desktop-winit/src/audio.rs index 7018be08..6d381735 100644 --- a/crates/host/prometeu-host-desktop-winit/src/audio.rs +++ b/crates/host/prometeu-host-desktop-winit/src/audio.rs @@ -175,6 +175,7 @@ impl HostAudio { } #[cfg(test)] +#[allow(clippy::items_after_test_module)] mod tests { use super::*; use crate::stats::HostStats; diff --git a/crates/host/prometeu-host-desktop-winit/src/input.rs b/crates/host/prometeu-host-desktop-winit/src/input.rs index 45764a68..21e7334c 100644 --- a/crates/host/prometeu-host-desktop-winit/src/input.rs +++ b/crates/host/prometeu-host-desktop-winit/src/input.rs @@ -54,15 +54,13 @@ impl HostInputHandler { self.signals.y_pos = v.1; } - WindowEvent::MouseInput { state, button, .. } => { - if *button == MouseButton::Left { - match state { - ElementState::Pressed => { - self.signals.f_signal = true; - } - ElementState::Released => { - self.signals.f_signal = false; - } + WindowEvent::MouseInput { state, button, .. } if *button == MouseButton::Left => { + match state { + ElementState::Pressed => { + self.signals.f_signal = true; + } + ElementState::Released => { + self.signals.f_signal = false; } } } diff --git a/crates/host/prometeu-host-desktop-winit/src/runner.rs b/crates/host/prometeu-host-desktop-winit/src/runner.rs index a8b28e39..239b0c59 100644 --- a/crates/host/prometeu-host-desktop-winit/src/runner.rs +++ b/crates/host/prometeu-host-desktop-winit/src/runner.rs @@ -782,10 +782,10 @@ mod tests { break; } - if let Ok(resp) = serde_json::from_str::(&line) { - if resp["type"] == "getState" { - return; - } + if let Ok(resp) = serde_json::from_str::(&line) + && resp["type"] == "getState" + { + return; } } panic!("Did not receive getState response");