From 0db0afa9006548b958119985dda901b1855be004 Mon Sep 17 00:00:00 2001 From: Louis Capitanchik <contact@louiscap.co> Date: Tue, 9 Jul 2024 14:12:23 +0100 Subject: [PATCH] Support Bevy 0.14 --- Cargo.toml | 7 ++--- README.md | 20 ++++++++------- src/fqpath.rs | 1 - src/json_loader/components.rs | 48 +++++++++++++++++------------------ src/lib.rs | 4 +-- tests/mod.rs | 4 +-- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 44ecbe6..b7f6dab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "micro_games_macros" -version = "0.4.0" +version = "0.5.0" edition = "2021" authors = ["Louis Capitanchik <contact@louiscap.co>"] description = "Utility macros to make it easier to build complex systems with Bevy" @@ -25,13 +25,14 @@ test-case = "3.3.1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" anyhow = "1.0" -micro_bevy_world_utils = "0.4.0" +micro_bevy_world_utils = "0.5" [dev-dependencies.bevy] -version = "0.13" +version = "0.14" default-features = false features = [ "bevy_asset", "bevy_sprite", "bevy_core_pipeline", + "serialize" ] diff --git a/README.md b/README.md index e019bb7..5ed9ce5 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ A collection of utility macros for building games -**Current Version Support: 0.2.x -> Bevy 0.12** +**Current Version Support: 0.5.x -> Bevy 0.14** ## Macros @@ -13,8 +13,10 @@ For executable examples, visit the rustdoc and/or read the doctests in `src/lib. ### JSON Loader -Generate a Bevy asset loader for a given asset, supporting JSON files that define a single instance of that asset type, or a -list of that asset type. Instances of an asset need to be identifiable, though the property that is used to identify a particular +Generate a Bevy asset loader for a given asset, supporting JSON files that define a single instance of that asset type, +or a +list of that asset type. Instances of an asset need to be identifiable, though the property that is used to identify a +particular asset is customisable ```rust @@ -26,9 +28,9 @@ asset is customisable )] #[uuid = "00000000-0000-0000-0000-000000000001"] pub struct MyAsset { - /// The asset identifier needs to implement [std::fmt::Display] - #[asset_id] - uniq_ident: usize, + /// The asset identifier needs to implement [std::fmt::Display] + #[asset_id] + uniq_ident: usize, } ``` @@ -42,14 +44,14 @@ use micro_games_macros::asset_system; #[asset_system] pub struct AssetHandles { - my_asset: Image, + my_asset: Image, } pub fn loading_system(mut loader: AssetHandlesLoader) { - loader.load_my_asset("path/to/asset.png", "Asset"); + loader.load_my_asset("path/to/asset.png", "Asset"); } pub fn use_asset_system(assets: Res<AssetHandles>) { - let handle = assets.my_asset("Asset"); + let handle = assets.my_asset("Asset"); } ``` diff --git a/src/fqpath.rs b/src/fqpath.rs index a73d9d7..6ff2d4e 100644 --- a/src/fqpath.rs +++ b/src/fqpath.rs @@ -56,7 +56,6 @@ fq!(BevyAsset => ::bevy::asset::Asset); fq!(BevyAssets => ::bevy::asset::Assets); fq!(BevyAssetEvent => ::bevy::asset::AssetEvent); fq!(BevyAssetLoader => ::bevy::asset::AssetLoader); -fq!(BevyBoxedFuture => ::bevy::asset::BoxedFuture); fq!(BevyLoadContext => ::bevy::asset::LoadContext); fq!(BevyLoadedAsset => ::bevy::asset::LoadedAsset); fq!(BevyAssetServer => ::bevy::asset::AssetServer); diff --git a/src/json_loader/components.rs b/src/json_loader/components.rs index 6143e52..59b74b2 100644 --- a/src/json_loader/components.rs +++ b/src/json_loader/components.rs @@ -122,20 +122,28 @@ pub fn define_loader( type Settings = (); type Error = #error_name; - fn load<'a>( + async fn load<'a>( &'a self, - mut reader: &'a mut #BevyAssetReader, + mut reader: &'a mut #BevyAssetReader<'_>, _settings: &'a Self::Settings, - load_context: &'a mut #BevyLoadContext, - ) -> #BevyBoxedFuture<'a, #FQResult<Self::Asset, Self::Error>> { - #FQBox::pin(async move { - let mut bytes = #FQVec::new(); - #BevyAsyncRead::read_to_end(&mut reader, &mut bytes).await?; - let data: #set_name = ::serde_json::from_slice(bytes.as_slice())?; - - let mut asset_map = #FQHashMap::new(); - match data { - #set_name::One(single_asset) => { + load_context: &'a mut #BevyLoadContext<'_>, + ) -> #FQResult<Self::Asset, Self::Error> { + let mut bytes = #FQVec::new(); + #BevyAsyncRead::read_to_end(&mut reader, &mut bytes).await?; + let data: #set_name = ::serde_json::from_slice(bytes.as_slice())?; + + let mut asset_map = #FQHashMap::new(); + match data { + #set_name::One(single_asset) => { + let asset_id = format!("{}", &single_asset.#id_field); + let handle = load_context.add_labeled_asset( + asset_id.clone(), + single_asset, + ); + asset_map.insert(asset_id, handle); + } + #set_name::Many(asset_list) => { + for single_asset in asset_list.into_iter() { let asset_id = format!("{}", &single_asset.#id_field); let handle = load_context.add_labeled_asset( asset_id.clone(), @@ -143,19 +151,9 @@ pub fn define_loader( ); asset_map.insert(asset_id, handle); } - #set_name::Many(asset_list) => { - for single_asset in asset_list.into_iter() { - let asset_id = format!("{}", &single_asset.#id_field); - let handle = load_context.add_labeled_asset( - asset_id.clone(), - single_asset, - ); - asset_map.insert(asset_id, handle); - } - } } - Ok(#index_name(asset_map)) - }) + } + Ok(#index_name(asset_map)) } fn extensions(&self) -> &[&str] { @@ -213,7 +211,7 @@ pub fn define_load_handler( match event { #BevyAssetEvent::LoadedWithDependencies { id } | #BevyAssetEvent::Added { id } | #BevyAssetEvent::Modified { id } => { let handle = #BevyHandle::Weak(*id); - if let Some(asset_container) = asset_data.get(handle) { + if let Some(asset_container) = asset_data.get(&handle) { for (id, handle) in asset_container.iter() { asset_storage.#storage_asset_name.insert(id.clone(), handle.clone()); } diff --git a/src/lib.rs b/src/lib.rs index 6b62796..d1e93e3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -249,7 +249,7 @@ pub fn json_loader(input: TokenStream) -> TokenStream { /// The included property must be a `SystemParam`, and has access to the `'w` lifetime /// /// ```rust -/// use bevy::prelude::{Assets, Event, EventWriter, Handle, Image, ResMut, TextureAtlasLayout, Vec2}; +/// use bevy::prelude::{Assets, Event, EventWriter, Handle, Image, ResMut, TextureAtlasLayout, UVec2}; /// use micro_games_macros::{asset_system, loader_property}; /// /// #[derive(Event)] @@ -269,7 +269,7 @@ pub fn json_loader(input: TokenStream) -> TokenStream { /// impl<'w> AssetHandlesLoader<'w> { /// pub fn load_spritesheet(&mut self, path: String, name: String) -> Handle<TextureAtlasLayout> { /// let image_handle = self.load_image(path, name.clone()); -/// let sheet = TextureAtlasLayout::new_empty(Vec2::ZERO); +/// let sheet = TextureAtlasLayout::new_empty(UVec2::ZERO); /// let sheet_handle = self.sheets.add(sheet); /// /// self.storage diff --git a/tests/mod.rs b/tests/mod.rs index fb77fd0..0c430bd 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -29,7 +29,7 @@ fn event_system_correctly_generates_and_dispatches_events() { ); dispatch_my_events( - &mut app.world, + app.world_mut(), MyEvents::Wait(WaitEvent { source: Entity::from_raw(0), }), @@ -37,5 +37,5 @@ fn event_system_correctly_generates_and_dispatches_events() { app.update(); - assert!(app.world.resource::<HasRun>().0); + assert!(app.world().resource::<HasRun>().0); } -- GitLab