add blit_atlas method

for some additional convenience when blitting BitmapAtlas tiles
This commit is contained in:
Gered 2022-07-09 18:17:28 -04:00
parent 6a730ed70c
commit 0ccc37420d
3 changed files with 23 additions and 4 deletions

View file

@ -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,
);

View file

@ -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)]

View file

@ -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<usize> for BitmapAtlas {
type Output = Rect;
fn index(&self, index: usize) -> &Self::Output {
&self.tiles[index]
self.get(index).unwrap()
}
}