Files
isospace/src/assets.rs
2025-08-24 11:33:31 -07:00

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);
}