use crate::sprite::SpriteSheet;
use std::collections::HashMap;
use image::ImageError;
pub struct ResourceManager {
sprite_sheets: HashMap<String, SpriteSheet>,
}
impl ResourceManager {
pub fn new() -> Self {
Self {
sprite_sheets: HashMap::new(),
}
}
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(())
}
pub fn get_sprite_sheet(&self, key: &str) -> Option<&SpriteSheet> {
self.sprite_sheets.get(key)
}
pub fn unload_sprite_sheet(&mut self, key: &str) -> bool {
self.sprite_sheets.remove(key).is_some()
}
pub fn clear(&mut self) {
self.sprite_sheets.clear();
}
pub fn sprite_sheet_count(&self) -> usize {
self.sprite_sheets.len()
}
}
impl Default for ResourceManager {
fn default() -> Self {
Self::new()
}
}