use bevy::prelude::*; use std::path::Path; pub struct TileImage { name: &'static str, thumbnail_handle: Handle, tile_handle: Handle, } #[derive(Resource)] pub struct AssetLibrary { tile_images: Vec, } impl AssetLibrary { fn new(asset_server: &AssetServer) -> Self { let tile_names = vec![ "corner-ne-1-wall", "corner-ne-2-walls-south", "corner-ne-2-walls-west", "corner-ne-3-walls", "corner-nw-1-wall", "corner-nw-2-walls-south", "corner-nw-2-walls-east", "corner-nw-3-walls", "corner-se-1-wall", "corner-se-2-walls-north", "corner-se-2-walls-west", "corner-se-3-walls", "corner-sw-1-wall", "corner-sw-2-walls-north", "corner-sw-2-walls-east", "corner-sw-3-walls", "full-0-walls", "full-1-wall", "full-2-walls", "full-3-walls", "full-4-walls", ]; let tile_images = tile_names .iter() .cloned() .map(|name| { let thumbnail_path = Path::new("thumbnails").join(name).with_extension("png"); let tile_path = Path::new("tiles").join(name).with_extension("png"); let thumbnail_handle = asset_server.load::(thumbnail_path); let tile_handle = asset_server.load::(tile_path); TileImage { name, thumbnail_handle, tile_handle, } }) .collect(); Self { tile_images } } pub fn get_thumbnail(&self, name: &str) -> Option> { self .tile_images .iter() .find(|&tile| tile.name == name) .map(|tile| tile.thumbnail_handle.clone()) } pub fn get_tile(&self, name: &str) -> Option> { self .tile_images .iter() .find(|&tile| tile.name == name) .map(|tile| tile.tile_handle.clone()) } } pub fn load_assets(mut commands: Commands, asset_server: Res) { let asset_library = AssetLibrary::new(&asset_server); commands.insert_resource(asset_library); }