mod handle; pub use handle::*; use bevy_core::bytes::GetBytes; use std::collections::HashMap; pub trait Asset { fn load(descriptor: D) -> Self; } pub struct AssetStorage { assets: HashMap, names: HashMap>, } impl AssetStorage { pub fn new() -> AssetStorage { AssetStorage { assets: HashMap::new(), names: HashMap::new(), } } pub fn get_named(&mut self, name: &str) -> Option> { self.names.get(name).map(|handle| *handle) } pub fn add(&mut self, asset: T) -> Handle { let id = HandleId::new(); self.assets.insert(id, asset); Handle::new(id) } pub fn add_with_handle(&mut self, handle: Handle, asset: T) { self.assets.insert(handle.id, asset); } pub fn add_default(&mut self, asset: T) -> Handle { self.assets.insert(DEFAULT_HANDLE_ID, asset); Handle::default() } pub fn set_name(&mut self, name: &str, handle: Handle) { self.names.insert(name.to_string(), handle); } pub fn get_id(&self, id: HandleId) -> Option<&T> { self.assets.get(&id) } pub fn get_id_mut(&mut self, id: HandleId) -> Option<&mut T> { self.assets.get_mut(&id) } pub fn get(&self, handle: &Handle) -> Option<&T> { self.assets.get(&handle.id) } pub fn get_mut(&mut self, handle: &Handle) -> Option<&mut T> { self.assets.get_mut(&handle.id) } pub fn iter(&self) -> impl Iterator, &T)> { self.assets.iter().map(|(k, v)| (Handle::new(*k), v)) } } impl GetBytes for Handle { fn get_bytes(&self) -> Vec { Vec::new() } fn get_bytes_ref(&self) -> Option<&[u8]> { None } }