use glam::*;
use itertools::Itertools as _;
#[derive(Debug, Clone)]
pub struct Sprite<'a> {
pub texture: &'a wgpu::Texture,
pub src_offset: IVec2,
pub src_size: UVec2,
pub src_layer: u32,
pub transform: Affine2,
pub tint: crate::Color,
}
pub fn batch<'a>(sprites: &'a [Sprite]) -> Vec<crate::Group<'a>> {
sprites
.iter()
.chunk_by(|s| s.texture)
.into_iter()
.map(|(_, chunk)| {
let chunk = chunk.collect::<Vec<_>>();
crate::Group {
texture: chunk.first().unwrap().texture,
items: chunk
.into_iter()
.map(|s| crate::Item {
src_offset: s.src_offset,
src_size: s.src_size,
src_layer: s.src_layer,
transform: s.transform,
tint: s.tint,
})
.collect::<Vec<_>>(),
}
})
.collect::<Vec<_>>()
}