jayce 12.1.0

jayce is a tokenizer 🌌
Documentation
use crate::{
    app::AppData,
    camera::Camera,
    model::{self, Model},
    texture::{self, Texture},
};
use anyhow::{anyhow, Result};
use std::collections::HashMap;
use vulkanalia::prelude::v1_0::*;

#[derive(Debug)]
pub struct Assets {
    pub cameras: HashMap<String, Camera>,
    pub(crate) active_camera: String,
    pub(crate) models: HashMap<String, Model>,
    pub(crate) active_models: Vec<String>,
    pub(crate) textures: HashMap<String, Texture>,
}
impl Default for Assets {
    fn default() -> Self {
        Self {
            cameras: HashMap::new(),
            active_camera: String::new(),
            models: HashMap::new(),
            active_models: Vec::new(),
            textures: HashMap::new(),
        }
    }
}
impl Assets {
    pub(crate) fn load_model(
        &mut self,
        name: &str,
        instance: &mut Instance,
        device: &mut Device,
        data: &mut AppData,
    ) -> Result<()> {
        if self.models.contains_key(name) {
            return Err(anyhow!("Mesh name already in use: {}", name));
        }

        self.models.insert(
            name.to_string(),
            model::load_model(name, instance, device, data)?,
        );
        Ok(())
    }

    pub(crate) fn load_texture(
        &mut self,
        name: &str,
        instance: &mut Instance,
        device: &mut Device,
        data: &mut AppData,
    ) -> Result<()> {
        if self.textures.contains_key(name) {
            return Err(anyhow!("Mesh name already in use: {}", name));
        }

        self.textures.insert(
            name.to_string(),
            texture::load_texture(name, instance, device, data)?,
        );
        Ok(())
    }
}