From 0ccc37420d96562135b810c09b80b1f56459e6be Mon Sep 17 00:00:00 2001 From: gered Date: Sat, 9 Jul 2022 18:17:28 -0400 Subject: [PATCH] add blit_atlas method for some additional convenience when blitting BitmapAtlas tiles --- examples/slimed/src/entities/systems.rs | 6 +++--- libretrogd/src/graphics/bitmap/blit.rs | 14 ++++++++++++++ libretrogd/src/graphics/bitmapatlas.rs | 7 ++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/examples/slimed/src/entities/systems.rs b/examples/slimed/src/entities/systems.rs index 3fdce1a..6bf4114 100644 --- a/examples/slimed/src/entities/systems.rs +++ b/examples/slimed/src/entities/systems.rs @@ -707,10 +707,10 @@ fn render_system_sprites(context: &mut Core) { // now render them in the correct order ... for (entity, position, blit_method) in context.sprite_render_list.iter() { let sprite = sprites.get(entity).unwrap(); - context.system.video.blit_region( + context.system.video.blit_atlas( *blit_method, - sprite.atlas.bitmap(), - &sprite.atlas[sprite.index], + &sprite.atlas, + sprite.index, position.x as i32 - camera.x, position.y as i32 - camera.y, ); diff --git a/libretrogd/src/graphics/bitmap/blit.rs b/libretrogd/src/graphics/bitmap/blit.rs index 202d461..4626d42 100644 --- a/libretrogd/src/graphics/bitmap/blit.rs +++ b/libretrogd/src/graphics/bitmap/blit.rs @@ -750,11 +750,25 @@ impl Bitmap { self.blit_region(method, src, &src_region, x, y); } + #[inline] + pub fn blit_atlas(&mut self, method: BlitMethod, src: &BitmapAtlas, index: usize, x: i32, y: i32) { + if let Some(src_region) = src.get(index) { + self.blit_region(method, src.bitmap(), src_region, x, y); + } + } + #[inline] pub unsafe fn blit_unchecked(&mut self, method: BlitMethod, src: &Bitmap, x: i32, y: i32) { let src_region = Rect::new(0, 0, src.width, src.height); self.blit_region_unchecked(method, src, &src_region, x, y); } + + #[inline] + pub unsafe fn blit_atlas_unchecked(&mut self, method: BlitMethod, src: &BitmapAtlas, index: usize, x: i32, y: i32) { + if let Some(src_region) = src.get(index) { + self.blit_region_unchecked(method, src.bitmap(), &src_region, x, y); + } + } } #[cfg(test)] diff --git a/libretrogd/src/graphics/bitmapatlas.rs b/libretrogd/src/graphics/bitmapatlas.rs index 831a20d..53ccabf 100644 --- a/libretrogd/src/graphics/bitmapatlas.rs +++ b/libretrogd/src/graphics/bitmapatlas.rs @@ -101,6 +101,11 @@ impl BitmapAtlas { self.tiles.len() } + #[inline] + pub fn get(&self, index: usize) -> Option<&Rect> { + self.tiles.get(index) + } + pub fn bitmap(&self) -> &Bitmap { &self.bitmap } @@ -110,7 +115,7 @@ impl Index for BitmapAtlas { type Output = Rect; fn index(&self, index: usize) -> &Self::Output { - &self.tiles[index] + self.get(index).unwrap() } }