use image::{ImageResult, RgbaImage};
use std::path::Path;
use crate::{utils::save_as_png, GridCompleteAtlas};
pub trait TilesProvider {}
pub trait GridAtlas
where
Self: Sized + Clone + Send + Sync,
GridCompleteAtlas: From<Self>,
{
unsafe fn new(image: RgbaImage) -> Self;
fn create(image: &RgbaImage, origin: (u32, u32), size: (u32, u32)) -> ImageResult<Self>;
fn get_cell_size(&self) -> (u32, u32);
fn get_image(&self) -> &RgbaImage;
fn get_by_corner(&self, ru: bool, rd: bool, ld: bool, lu: bool) -> RgbaImage {
let mask = (ru as u8) << 1 | (rd as u8) << 3 | (ld as u8) << 5 | (lu as u8) << 7;
self.get_by_mask(mask)
}
fn get_by_side(&self, u: bool, r: bool, d: bool, l: bool) -> RgbaImage {
let mask = (u as u8) << 0 | (r as u8) << 2 | (d as u8) << 4 | (l as u8) << 6;
self.get_by_mask(mask)
}
fn get_by_mask(&self, mask: u8) -> RgbaImage;
fn load<P>(path: P) -> ImageResult<Self>
where
P: AsRef<Path>;
fn save<P>(&self, path: P) -> ImageResult<()>
where
P: AsRef<Path>,
{
save_as_png(self.get_image(), path)
}
}