From 4ca9d31db2c3910bee24546b0cddc55148eb10c4 Mon Sep 17 00:00:00 2001 From: Louis <contact@louiscap.co> Date: Sun, 27 Apr 2025 01:08:12 +0100 Subject: [PATCH] Improve compile parallelism by converting bevy::prelude imports to bevy_[module] imports --- Cargo.toml | 12 +++++++++--- examples/basic.rs | 4 ++-- src/definitions.rs | 41 ++++++++++++++++++++++++++++++++--------- src/directionality.rs | 2 +- src/lib.rs | 2 +- src/loader.rs | 12 ++++++------ src/query.rs | 20 ++++++++++++-------- src/systems.rs | 6 ++++-- 8 files changed, 67 insertions(+), 32 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 31659ff..b1bdad5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,13 +18,19 @@ required-features = ["json_loader"] default = ["json_loader"] json_loader = ["serde", "dep:serde_json"] toml_loader = ["serde", "dep:toml"] -serde = ["dep:serde", "bevy/serialize"] +serde = ["dep:serde"] [dependencies] serde = { version = "^1.0", optional = true } serde_json = { version = "^1.0", optional = true } toml = { version = "0.8", optional = true } -bevy = { version = "^0.15", default-features = false, features = ["bevy_asset", "bevy_sprite"] } + +bevy_asset = "0.16" +bevy_sprite = "0.16" +bevy_ecs = "0.16" +bevy_reflect = "0.16" +bevy_app = "0.16" +bevy_time = "0.16" [dev-dependencies] -bevy = "0.15" +bevy = "0.16" diff --git a/examples/basic.rs b/examples/basic.rs index 1a122a7..9505dbf 100644 --- a/examples/basic.rs +++ b/examples/basic.rs @@ -61,7 +61,7 @@ fn spawn_assets(mut commands: Commands, assets: Res<ExampleAssets>) { commands.spawn(( Camera2d::default(), - OrthographicProjection { + Projection::Orthographic(OrthographicProjection { area: Rect::new(-(WIDTH / 2.0), -(HEIGHT / 2.0), WIDTH / 2.0, HEIGHT / 2.0), scaling_mode: ScalingMode::AutoMin { min_height: HEIGHT, @@ -70,7 +70,7 @@ fn spawn_assets(mut commands: Commands, assets: Res<ExampleAssets>) { far: 1000., near: -1000., ..OrthographicProjection::default_2d() - }, + }), )); } diff --git a/src/definitions.rs b/src/definitions.rs index b3f0eb6..9575595 100644 --- a/src/definitions.rs +++ b/src/definitions.rs @@ -1,10 +1,27 @@ +use crate::directionality::Directionality; +use bevy_asset::{Asset, Handle}; +use bevy_ecs::bundle::Bundle; +use bevy_ecs::component::Component; +use bevy_reflect::{Reflect, TypePath}; +use bevy_sprite::Sprite; use std::collections::HashMap; use std::time::Duration; +macro_rules! dr { + ($type: ident -> $output: ty) => { + impl ::std::ops::Deref for $type { + type Target = $output; + fn deref(&self) -> &Self::Target { + &self.0 + } + } -use bevy::prelude::*; -use bevy::reflect::TypePath; - -use crate::directionality::Directionality; + impl ::std::ops::DerefMut for $type { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + }; +} #[derive(Clone, PartialOrd, PartialEq, Debug, Default, Reflect)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] @@ -19,16 +36,18 @@ impl AnimationFrames { } } -#[derive(Clone, Debug, TypePath, PartialEq, Default, Deref, DerefMut, Asset)] +#[derive(Clone, Debug, TypePath, PartialEq, Default, Asset)] #[cfg_attr( feature = "serde", derive(serde::Serialize, serde::Deserialize), serde(transparent) )] pub struct AnimationSet(pub HashMap<String, AnimationFrames>); +dr!(AnimationSet -> HashMap<String, AnimationFrames>); -#[derive(Clone, Debug, Component, PartialEq, Default, Deref, DerefMut)] +#[derive(Clone, Debug, Component, PartialEq, Default)] pub struct AnimationHandle(pub Handle<AnimationSet>); +dr!(AnimationHandle -> Handle<AnimationSet>); #[derive(Copy, Clone, Debug, Component, PartialEq, Eq, Default)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] @@ -154,7 +173,7 @@ pub fn create_child_animation() -> impl Bundle { (ChildAnimation,) } -#[derive(Clone, Debug, Component, PartialEq, PartialOrd, Default, Deref, DerefMut)] +#[derive(Clone, Debug, Component, PartialEq, PartialOrd, Default)] #[cfg_attr( feature = "serde", derive(serde::Serialize, serde::Deserialize), @@ -162,6 +181,8 @@ pub fn create_child_animation() -> impl Bundle { )] #[require(SimpleAnimationStatus)] pub struct SimpleAnimation(pub AnimationFrames); +dr!(SimpleAnimation -> AnimationFrames); + impl From<AnimationFrames> for SimpleAnimation { fn from(value: AnimationFrames) -> Self { SimpleAnimation(value) @@ -181,11 +202,12 @@ impl SimpleAnimation { } } -#[derive(Clone, Debug, Component, PartialEq, Eq, Default, Deref, DerefMut)] +#[derive(Clone, Debug, Component, PartialEq, Eq, Default)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct OverrideData(pub u128); +dr!(OverrideData -> u128); -#[derive(Clone, Debug, Component, PartialEq, Default, Deref, DerefMut)] +#[derive(Clone, Debug, Component, PartialEq, Default)] #[cfg_attr( feature = "serde", derive(serde::Serialize, serde::Deserialize), @@ -193,6 +215,7 @@ pub struct OverrideData(pub u128); )] #[require(OverrideData)] pub struct AnimationOverride(pub AnimationStatus); +dr!(AnimationOverride -> AnimationStatus); impl AnimationOverride { pub fn new(name: impl ToString) -> Self { diff --git a/src/directionality.rs b/src/directionality.rs index 6c70c15..e313a4b 100644 --- a/src/directionality.rs +++ b/src/directionality.rs @@ -1,4 +1,4 @@ -use bevy::prelude::Component; +use bevy_ecs::component::Component; use std::fmt::{Display, Formatter}; #[derive(Component, Copy, Clone, Debug, PartialEq, Eq, Default)] diff --git a/src/lib.rs b/src/lib.rs index 198ee30..0f786c1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,7 @@ pub mod query; pub mod systems; mod plugin { - use bevy::app::{PluginGroup, PluginGroupBuilder}; + use bevy_app::{PluginGroup, PluginGroupBuilder}; use crate::loader; diff --git a/src/loader.rs b/src/loader.rs index 3eb340d..37b62ff 100644 --- a/src/loader.rs +++ b/src/loader.rs @@ -26,8 +26,8 @@ impl Error for LoaderError {} #[cfg(feature = "json_loader")] mod json_loader { - use bevy::asset::io::Reader; - use bevy::asset::{AssetLoader, LoadContext}; + use bevy_asset::io::Reader; + use bevy_asset::{AssetLoader, LoadContext}; use crate::definitions::AnimationSet; use crate::loader::LoaderError; @@ -62,8 +62,8 @@ mod json_loader { #[cfg(feature = "toml_loader")] mod toml_loader { - use bevy::asset::io::Reader; - use bevy::asset::{AssetLoader, AsyncReadExt, LoadContext}; + use bevy_asset::io::Reader; + use bevy_asset::{AssetLoader, AsyncReadExt, LoadContext}; use crate::definitions::AnimationSet; use crate::loader::LoaderError; @@ -97,8 +97,8 @@ mod toml_loader { } mod _plugin { - use bevy::app::{App, Plugin}; - use bevy::asset::AssetApp; + use bevy_app::{App, Plugin}; + use bevy_asset::AssetApp; pub struct AnimationLoadersPlugin; impl Plugin for AnimationLoadersPlugin { diff --git a/src/query.rs b/src/query.rs index fdff107..e4a0480 100644 --- a/src/query.rs +++ b/src/query.rs @@ -4,10 +4,14 @@ use crate::definitions::{ }; use crate::directionality::Directionality; use crate::systems::AnimationCompleted; -use bevy::asset::Assets; -use bevy::ecs::query::{QueryData, QueryFilter}; -use bevy::prelude::{Commands, Entity, EventWriter, Parent, Query, Res, Time, With, Without}; -use bevy::sprite::Sprite; +use bevy_asset::Assets; +use bevy_ecs::entity::Entity; +use bevy_ecs::event::EventWriter; +use bevy_ecs::hierarchy::ChildOf; +use bevy_ecs::query::{QueryData, QueryFilter, With, Without}; +use bevy_ecs::system::{Commands, Query, Res}; +use bevy_sprite::Sprite; +use bevy_time::Time; #[derive(QueryData)] #[query_data(mutable)] @@ -196,7 +200,7 @@ pub fn play_override_animation( .remove::<(AnimationOverride, OverrideData)>(); if let Some(data) = data { - events.send(AnimationCompleted { + events.write(AnimationCompleted { entity, user_data: **data, }); @@ -241,7 +245,7 @@ pub fn play_directional_override_animation( .remove::<(AnimationOverride, OverrideData)>(); if let Some(data) = data { - events.send(AnimationCompleted { + events.write(AnimationCompleted { entity, user_data: **data, }); @@ -266,11 +270,11 @@ pub fn play_simple_animation( } pub fn sync_child_animation( - mut children: Query<(&Parent, &mut Sprite), With<SyncToParent>>, + mut children: Query<(&ChildOf, &mut Sprite), With<SyncToParent>>, parents: Query<&Sprite, Without<SyncToParent>>, ) { for (parent, mut child_sprite) in &mut children { - if let Ok(parent_sprite) = parents.get(**parent) { + if let Ok(parent_sprite) = parents.get(parent.parent()) { match ( parent_sprite.texture_atlas.as_ref(), child_sprite.texture_atlas.as_mut(), diff --git a/src/systems.rs b/src/systems.rs index a5cffa3..04ed501 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -2,7 +2,10 @@ use crate::query::{ play_animations, play_directional_animations, play_directional_override_animation, play_override_animation, play_simple_animation, sync_child_animation, }; -use bevy::prelude::*; +use bevy_app::{App, Plugin, PostUpdate}; +use bevy_ecs::entity::Entity; +use bevy_ecs::event::Event; +use bevy_ecs::schedule::{IntoScheduleConfigs, SystemSet}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, SystemSet)] pub enum AnimationSystems { @@ -11,7 +14,6 @@ pub enum AnimationSystems { } #[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Event)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct AnimationCompleted { pub entity: Entity, pub user_data: u128, -- GitLab