83 lines
2.0 KiB
Rust
83 lines
2.0 KiB
Rust
use bevy::prelude::*;
|
|
use std::path::Path;
|
|
|
|
pub struct TileImage {
|
|
name: &'static str,
|
|
thumbnail_handle: Handle<Image>,
|
|
tile_handle: Handle<Image>,
|
|
}
|
|
|
|
#[derive(Resource)]
|
|
pub struct AssetLibrary {
|
|
tile_images: Vec<TileImage>,
|
|
}
|
|
|
|
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::<Image>(thumbnail_path);
|
|
let tile_handle = asset_server.load::<Image>(tile_path);
|
|
|
|
TileImage {
|
|
name,
|
|
thumbnail_handle,
|
|
tile_handle,
|
|
}
|
|
})
|
|
.collect();
|
|
|
|
Self { tile_images }
|
|
}
|
|
|
|
pub fn get_thumbnail(&self, name: &str) -> Option<Handle<Image>> {
|
|
self
|
|
.tile_images
|
|
.iter()
|
|
.find(|&tile| tile.name == name)
|
|
.map(|tile| tile.thumbnail_handle.clone())
|
|
}
|
|
|
|
pub fn get_tile(&self, name: &str) -> Option<Handle<Image>> {
|
|
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<AssetServer>) {
|
|
let asset_library = AssetLibrary::new(&asset_server);
|
|
commands.insert_resource(asset_library);
|
|
}
|