
# Objective Fixes #16104 ## Solution I removed all instances of `:?` and put them back one by one where it caused an error. I removed some bevy_utils helper functions that were only used in 2 places and don't add value. See: #11478 ## Testing CI should catch the mistakes ## Migration Guide `bevy::utils::{dbg,info,warn,error}` were removed. Use `bevy::utils::tracing::{debug,info,warn,error}` instead. --------- Co-authored-by: SpecificProtagonist <vincentjunge@posteo.net>
66 lines
2.1 KiB
Rust
66 lines
2.1 KiB
Rust
//! Implements a custom asset io loader.
|
|
//! An [`AssetReader`] is what the asset server uses to read the raw bytes of assets.
|
|
//! It does not know anything about the asset formats, only how to talk to the underlying storage.
|
|
|
|
use bevy::{
|
|
asset::io::{
|
|
AssetReader, AssetReaderError, AssetSource, AssetSourceId, ErasedAssetReader, PathStream,
|
|
Reader,
|
|
},
|
|
prelude::*,
|
|
};
|
|
use std::path::Path;
|
|
|
|
/// A custom asset reader implementation that wraps a given asset reader implementation
|
|
struct CustomAssetReader(Box<dyn ErasedAssetReader>);
|
|
|
|
impl AssetReader for CustomAssetReader {
|
|
async fn read<'a>(&'a self, path: &'a Path) -> Result<impl Reader + 'a, AssetReaderError> {
|
|
info!("Reading {}", path.display());
|
|
self.0.read(path).await
|
|
}
|
|
async fn read_meta<'a>(&'a self, path: &'a Path) -> Result<impl Reader + 'a, AssetReaderError> {
|
|
self.0.read_meta(path).await
|
|
}
|
|
|
|
async fn read_directory<'a>(
|
|
&'a self,
|
|
path: &'a Path,
|
|
) -> Result<Box<PathStream>, AssetReaderError> {
|
|
self.0.read_directory(path).await
|
|
}
|
|
|
|
async fn is_directory<'a>(&'a self, path: &'a Path) -> Result<bool, AssetReaderError> {
|
|
self.0.is_directory(path).await
|
|
}
|
|
}
|
|
|
|
/// A plugins that registers our new asset reader
|
|
struct CustomAssetReaderPlugin;
|
|
|
|
impl Plugin for CustomAssetReaderPlugin {
|
|
fn build(&self, app: &mut App) {
|
|
app.register_asset_source(
|
|
AssetSourceId::Default,
|
|
AssetSource::build().with_reader(|| {
|
|
Box::new(CustomAssetReader(
|
|
// This is the default reader for the current platform
|
|
AssetSource::get_default_reader("assets".to_string())(),
|
|
))
|
|
}),
|
|
);
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
App::new()
|
|
.add_plugins((CustomAssetReaderPlugin, DefaultPlugins))
|
|
.add_systems(Startup, setup)
|
|
.run();
|
|
}
|
|
|
|
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
|
commands.spawn(Camera2d);
|
|
commands.spawn(Sprite::from_image(asset_server.load("branding/icon.png")));
|
|
}
|