diff options
| author | Micha White <botahamec@outlook.com> | 2024-08-15 20:16:32 -0400 |
|---|---|---|
| committer | Micha White <botahamec@outlook.com> | 2024-08-15 20:16:32 -0400 |
| commit | db9aa9f1bf49e8bede384b9ceb1e1fb82b522799 (patch) | |
| tree | 0d60727acf481f59b42ef0f74ed07c16ec562bcf /textures/src/lib.rs | |
| parent | f8a80039c74332e2101a177ef3fde31ef2077224 (diff) | |
Delete stuff
Diffstat (limited to 'textures/src/lib.rs')
| -rw-r--r-- | textures/src/lib.rs | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/textures/src/lib.rs b/textures/src/lib.rs deleted file mode 100644 index c1b56a8..0000000 --- a/textures/src/lib.rs +++ /dev/null @@ -1,96 +0,0 @@ -use std::collections::HashMap; -use std::path::Path; -use std::sync::Arc; - -use exun::{RawUnexpected, ResultErrorExt}; -use image::RgbaImage; -use packer::{RectanglePacker, TextureAtlas}; - -type ExunResult<T> = Result<T, RawUnexpected>; - -pub struct TextureManager { - textures: HashMap<Arc<str>, TextureMetadata>, - loaded_textures: HashMap<Arc<str>, Arc<RgbaImage>>, - packer: RectanglePacker, - target_size: usize, - current_size: usize, -} - -struct TextureMetadata { - path: Arc<Path>, - size: usize, -} - -impl TextureManager { - pub fn new(target_size: usize) -> Self { - Self { - textures: HashMap::new(), - loaded_textures: HashMap::new(), - packer: RectanglePacker::new(), - target_size, - current_size: 0, - } - } - - pub fn add_texture(&mut self, name: Arc<str>, path: Arc<Path>, size: usize) { - self.textures.insert(name, TextureMetadata { path, size }); - } - - pub fn try_preload(&mut self, name: Arc<str>) -> ExunResult<Option<bool>> { - let Some(metadata) = self.textures.get(&name) else { - return Ok(None); - }; - - if self.current_size + metadata.size < self.target_size { - self.load(name)?; - Ok(Some(true)) - } else { - Ok(Some(false)) - } - } - - pub fn load(&mut self, name: Arc<str>) -> ExunResult<Option<()>> { - let Some(metadata) = self.textures.get(&name) else { - return Ok(None); - }; - - self.current_size += metadata.size; - let texture = image::open(&metadata.path).unexpect()?.to_rgba8(); - self.loaded_textures.insert(name, Arc::new(texture)); - - Ok(Some(())) - } - - pub fn unload(&mut self, name: Arc<str>) -> Option<()> { - self.loaded_textures.remove(&name)?; - Some(()) - } - - pub fn pack_texture(&mut self, name: Arc<str>) -> ExunResult<()> { - if !self.loaded_textures.contains_key(&name) { - self.load(name.clone())?; - } - - self.packer.add_texture( - name.clone(), - self.loaded_textures - .get(&name) - .expect("we checked to make sure it was loaded") - .clone(), - ); - - Ok(()) - } - - pub fn reset_packer(&mut self) { - self.packer = RectanglePacker::new(); - } - - pub fn reload_texture_atlas( - &mut self, - min_width: u32, - min_height: u32, - ) -> ExunResult<TextureAtlas> { - self.packer.output(min_width, min_height) - } -} |
