1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
use crate::sprite::Sprite; const MAX_SPRITES: usize = crate::mem::DOUBLE_BUFFER_SPRITE_COUNT; #[repr(C)] #[derive(Clone, Copy)] pub struct UnspecificState<S> { sprite_len: usize, sprites: S, } pub type State = UnspecificState<[Sprite; MAX_SPRITES]>; impl State { pub fn sprites(&self) -> &[Sprite] { &self.sprites[..self.sprite_len] } pub fn sprites_mut(&mut self) -> &mut [Sprite] { &mut self.sprites[..self.sprite_len] } pub fn append_sprite(&mut self, sprite: &Sprite) { if self.sprite_len < MAX_SPRITES { self.sprites[self.sprite_len] = *sprite; self.sprite_len += 1; } } } impl Default for State { fn default() -> Self { Self { sprite_len: 0, sprites: [Sprite::default(); MAX_SPRITES], } } } impl std::fmt::Debug for State { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "State({:?})", self.sprites()) } }