diff --git a/src/assets.rs b/src/assets.rs index fc78488..3b9341e 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -2,6 +2,7 @@ use plist; use std::collections::HashMap; +use image::GenericImageView; use image::DynamicImage; /// "{1,2}" -> `(1, 2)` @@ -195,11 +196,9 @@ pub fn load_animations(path: &str) -> Animations { } /// Trims out a sprite from an image according to a .plist spritesheet. -pub fn get_sprite(spritesheet: Spritesheet, img: DynamicImage, key: String) -> Option<(DynamicImage, Sprite)> { +pub fn get_sprite(spritesheet: Spritesheet, img: &DynamicImage, key: String) -> Option<(DynamicImage, Sprite)> { let sprite = spritesheet.sprites.get(&key); - let mut canvas = img; - if sprite.is_none() { return None; } @@ -212,7 +211,7 @@ pub fn get_sprite(spritesheet: Spritesheet, img: DynamicImage, key: String) -> O (left, top, width, height) = (left, top, height, width); } - canvas = canvas.crop(left as u32, top as u32, width as u32, height as u32); + let mut canvas: DynamicImage = image::DynamicImage::ImageRgba8(img.view(left as u32, top as u32, width as u32, height as u32).to_image()); if sprite.rotated { canvas = canvas.rotate270(); @@ -225,8 +224,7 @@ pub fn get_sprite(spritesheet: Spritesheet, img: DynamicImage, key: String) -> O } /// Trims out a sprite from an image according to a LoadedSpritesheet object. -pub fn get_sprite_from_loaded(spritesheet: LoadedSpritesheet, key: String) -> Option<(DynamicImage, Sprite)> { - let texture = spritesheet.texture; - let sprite = get_sprite(spritesheet.spritesheet, texture, key); +pub fn get_sprite_from_loaded(spritesheet: &LoadedSpritesheet, key: String) -> Option<(DynamicImage, Sprite)> { + let sprite = get_sprite(spritesheet.spritesheet.clone(), &spritesheet.texture, key); return sprite; } \ No newline at end of file diff --git a/src/renderer.rs b/src/renderer.rs index 4eb8139..bc0421f 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -129,14 +129,14 @@ pub fn render_normal(basename: String, col1: [f32; 3], col2: [f32; 3], glow: boo let layers = vec![ (if glow || (is_black(col1) && is_black(col2)) { - assets::get_sprite_from_loaded(game_sheet_glow, format!("{}_glow_001.png", basename)) + assets::get_sprite_from_loaded(&game_sheet_glow, format!("{}_glow_001.png", basename)) } else { None }), - assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_2_001.png", basename)), - assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_3_001.png", basename)), - assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_001.png", basename)), - assets::get_sprite_from_loaded(game_sheet_02, format!("{}_extra_001.png", basename)) + assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_2_001.png", basename)), + assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_3_001.png", basename)), + assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_001.png", basename)), + assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_extra_001.png", basename)) ]; let colors: Vec> = vec![ @@ -203,7 +203,7 @@ pub fn render_zany(basename: String, col1: [f32; 3], col2: [f32; 3], glow: bool, layers.extend(names.iter().enumerate().map(|(i, v)| { ( - assets::get_sprite_from_loaded(game_sheet_02.clone(), v.clone()), + assets::get_sprite_from_loaded(&game_sheet_02, v.clone()), a.position, flip(a.scale, a.flipped), a.rotation,