pub struct SpriteData { data: [u8; 16], pointer: usize, } impl SpriteData { pub fn new() -> Self { Self { data: [0; 16], pointer: 0 } } pub fn push(&mut self, val: u8) { self.data[self.pointer] = val; self.pointer = (self.pointer + 1) % 16; } pub fn get_1bit_sprite(&self) -> [u8; 8] { let mut sprite = [0u8; 8]; for (i, r) in sprite.iter_mut().enumerate() { *r = self.data[(self.pointer + i + 8) % 16] } return sprite; } pub fn get_2bit_sprite(&self) -> [u8; 16] { let mut sprite = [0u8; 16]; for (i, r) in sprite.iter_mut().enumerate() { *r = self.data[(self.pointer + i) % 16] } return sprite; } }