convenience method to clone single BitmapAtlas tiles as new bitmaps
This commit is contained in:
parent
4257985962
commit
73e64946f7
|
@ -2,13 +2,16 @@ use std::ops::Index;
|
||||||
|
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use crate::graphics::GeneralBitmap;
|
use crate::graphics::{GeneralBitmap, GeneralBlitMethod};
|
||||||
use crate::math::Rect;
|
use crate::math::Rect;
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
pub enum BitmapAtlasError {
|
pub enum BitmapAtlasError {
|
||||||
#[error("Region is out of bounds for the Bitmap used by the BitmapAtlas")]
|
#[error("Region is out of bounds for the Bitmap used by the BitmapAtlas")]
|
||||||
OutOfBounds,
|
OutOfBounds,
|
||||||
|
|
||||||
|
#[error("Tile index {0} is invalid / out of range")]
|
||||||
|
InvalidTileIndex(usize),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||||
|
@ -118,6 +121,16 @@ where
|
||||||
pub fn bitmap(&self) -> &BitmapType {
|
pub fn bitmap(&self) -> &BitmapType {
|
||||||
&self.bitmap
|
&self.bitmap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn clone_tile(&self, index: usize) -> Result<BitmapType, BitmapAtlasError> {
|
||||||
|
if let Some(tile_rect) = self.get(index) {
|
||||||
|
let mut tile_bitmap = BitmapType::new(tile_rect.width, tile_rect.height).unwrap();
|
||||||
|
tile_bitmap.blit_region(GeneralBlitMethod::Solid, &self.bitmap, tile_rect, 0, 0);
|
||||||
|
Ok(tile_bitmap)
|
||||||
|
} else {
|
||||||
|
Err(BitmapAtlasError::InvalidTileIndex(index))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<BitmapType> Index<usize> for BitmapAtlas<BitmapType>
|
impl<BitmapType> Index<usize> for BitmapAtlas<BitmapType>
|
||||||
|
|
Loading…
Reference in a new issue