reuse dynamic sprite

This commit is contained in:
Corwin 2023-06-25 13:38:13 +01:00
parent b99fff7c8e
commit 87ac2fe53c
No known key found for this signature in database
2 changed files with 21 additions and 5 deletions

View file

@ -82,6 +82,12 @@ impl WorkingLetter {
x_offset: 0, x_offset: 0,
} }
} }
fn reset(&mut self) {
self.x_position = 0;
self.x_offset = 0;
self.dynamic.clear(0);
}
} }
pub struct Configuration { pub struct Configuration {
@ -177,15 +183,18 @@ impl WordRender<'_> {
} }
fn finalise_letter(&mut self) { fn finalise_letter(&mut self) {
let mut final_letter = WorkingLetter::new(self.config.sprite_size); let sprite = self
core::mem::swap(&mut final_letter, &mut self.working.letter); .working
.letter
let sprite = final_letter.dynamic.to_vram(self.config.palette.clone()); .dynamic
.to_vram(self.config.palette.clone());
self.working.meta.letters.push(LetterGroup { self.working.meta.letters.push(LetterGroup {
sprite, sprite,
offset: self.working.word_offset, offset: self.working.word_offset,
}); });
self.working.word_offset += final_letter.x_position; self.working.word_offset += self.working.letter.x_position;
self.working.letter.reset();
} }
fn render_char(&mut self, c: char) { fn render_char(&mut self, c: char) {

View file

@ -345,6 +345,13 @@ impl<A: Allocator> DynamicSprite<A> {
self.data[byte_to_modify] = byte; self.data[byte_to_modify] = byte;
} }
/// Wipes the sprite
pub fn clear(&mut self, paletted_pixel: usize) {
assert!(paletted_pixel < 0x10);
let reset = (paletted_pixel | paletted_pixel << 4) as u8;
self.data.fill(reset);
}
/// Tries to copy the sprite to vram to be used to set object sprites. /// Tries to copy the sprite to vram to be used to set object sprites.
pub fn try_vram(&self, palette: PaletteVram) -> Result<SpriteVram, LoaderError> { pub fn try_vram(&self, palette: PaletteVram) -> Result<SpriteVram, LoaderError> {
SpriteVram::new(&self.data, self.size, palette) SpriteVram::new(&self.data, self.size, palette)