sevenx_engine 0.2.11

Engine de jogos 2D/3D completa com suporte Android, física, áudio, partículas, tilemap, UI, eventos e sistema 3D avançado com PBR.
Documentation
use crate::sprite::SpriteSheet;
use std::collections::HashMap;
use image::ImageError;

/// Gerenciador de recursos para cache de texturas e sprites.
pub struct ResourceManager {
    sprite_sheets: HashMap<String, SpriteSheet>,
}

impl ResourceManager {
    pub fn new() -> Self {
        Self {
            sprite_sheets: HashMap::new(),
        }
    }

    /// Carrega uma sprite sheet. Se já estiver carregada, retorna a referência em cache.
    pub fn load_sprite_sheet(
        &mut self,
        key: &str,
        path: &str,
        frame_width: u32,
        frame_height: u32,
    ) -> Result<(), ImageError> {
        if !self.sprite_sheets.contains_key(key) {
            let sheet = SpriteSheet::load(path, frame_width, frame_height)?;
            self.sprite_sheets.insert(key.to_string(), sheet);
        }
        Ok(())
    }

    /// Obtém uma sprite sheet do cache.
    pub fn get_sprite_sheet(&self, key: &str) -> Option<&SpriteSheet> {
        self.sprite_sheets.get(key)
    }

    /// Remove uma sprite sheet do cache.
    pub fn unload_sprite_sheet(&mut self, key: &str) -> bool {
        self.sprite_sheets.remove(key).is_some()
    }

    /// Limpa todos os recursos.
    pub fn clear(&mut self) {
        self.sprite_sheets.clear();
    }

    /// Retorna o número de sprite sheets carregadas.
    pub fn sprite_sheet_count(&self) -> usize {
        self.sprite_sheets.len()
    }
}

impl Default for ResourceManager {
    fn default() -> Self {
        Self::new()
    }
}