mirror of
https://github.com/bevyengine/bevy
synced 2025-02-16 14:08:32 +00:00
# Objective - Fixes #9968 ## Solution - Uses [open_dir](https://docs.rs/ndk/latest/ndk/asset/struct.AssetManager.html#method.open_dir) to read directories and collects child list, since it can't be shared across threads. - For `is_directory`, uses result of [open](https://docs.rs/ndk/latest/ndk/asset/struct.AssetManager.html#method.open), which will fail for directories. I tried using the result of `open_dir` for this, but it was successful for files too, which made loading folders return empty lists, since `open_dir` was successful and treated all files as empty directories. - Ignoring `meta` files was copied from filesystem implementation --- ## Changelog - Fixed: Android's AssetReader implementation now supports read_directory and is_directory. ## Notes I noticed late that there was the #9968 issue (I only noticed #9591), so I have also missed that a PR was already open (#9969). Feel free to copy over the fixes from this one over there. The only difference I notice between these 2, is that I have used `open` instead of `open_dir` for `is_directory` implementation. I have tried with `open_dir` too, but unfortunately that didn't work. I tested this on an actual device, using the mobile example, by making some minor changes: ```rust #[derive(Resource)] struct FolderAssets(Handle<LoadedFolder>); // the `bevy_main` proc_macro generates the required boilerplate for iOS and Android #[bevy_main] fn main() { // ... .add_systems(Startup, (setup_scene, load_music_files)) .add_systems( Update, // Removed the handle_lifetime since AudioBundle is added later (touch_camera, button_handler, setup_music), ); // ... } fn load_music_files(asset_server: Res<AssetServer>, mut commands: Commands) { let sounds = asset_server.load_folder("sounds"); commands.insert_resource(FolderAssets(sounds)); } fn setup_music( mut commands: Commands, folders: Res<Assets<LoadedFolder>>, mut loaded_event: EventReader<AssetEvent<LoadedFolder>>, ) { for event in loaded_event.read() { if let AssetEvent::LoadedWithDependencies { id } = event { if let Some(folder) = folders.get(*id) { warn!("Folder items: {:?}", folder.handles); if let Some(source) = folder.handles.first() { commands.spawn(AudioBundle { source: source.clone().typed::<AudioSource>(), settings: PlaybackSettings::LOOP, }); } } } } } ``` --------- Co-authored-by: Kanabenki <lucien.menassol@gmail.com> Co-authored-by: François Mockers <francois.mockers@vleue.com> |
||
---|---|---|
.. | ||
macros | ||
src | ||
Cargo.toml | ||
README.md |