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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
use crate::Instance; use crate::SpriteSheet; use crate::Translation; use std::rc::Rc; pub struct SpriteBatch { sheet: Rc<SpriteSheet>, instances: Vec<Instance>, translation: Translation, } impl SpriteBatch { pub fn new(sheet: Rc<SpriteSheet>) -> Self { Self { sheet, instances: Vec::new(), translation: [0.0, 0.0], } } pub fn sheet(&self) -> &SpriteSheet { &self.sheet } pub fn translation(&self) -> Translation { self.translation } pub fn set_translation(&mut self, translation: Translation) { self.translation = translation; } pub fn instances(&self) -> &[Instance] { &self.instances } pub fn get(&self, i: usize) -> &Instance { &self.instances[i] } pub fn get_mut(&mut self, i: usize) -> &mut Instance { &mut self.instances[i] } pub fn len(&self) -> usize { self.instances.len() } pub fn set<I: Into<Instance>>(&mut self, i: usize, inst: I) { self.instances[i] = inst.into() } pub fn add<I: Into<Instance>>(&mut self, inst: I) { self.instances.push(inst.into()); } pub fn last(&self) -> Option<&Instance> { self.instances.last() } pub fn pop(&mut self) { self.instances.pop(); } }