diff --git a/crates/bevy_transform/src/lib.rs b/crates/bevy_transform/src/lib.rs index e45c648f7264a..131d1d81545d0 100644 --- a/crates/bevy_transform/src/lib.rs +++ b/crates/bevy_transform/src/lib.rs @@ -84,17 +84,17 @@ pub enum TransformSystem { TransformPropagate, } +// A set for `propagate_transforms` to mark it as ambiguous with `sync_simple_transforms`. +// Used instead of the `SystemTypeSet` as that would not allow multiple instances of the system. +#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] +struct PropagateTransformsSet; + /// The base plugin for handling [`Transform`] components #[derive(Default)] pub struct TransformPlugin; impl Plugin for TransformPlugin { fn build(&self, app: &mut App) { - // A set for `propagate_transforms` to mark it as ambiguous with `sync_simple_transforms`. - // Used instead of the `SystemTypeSet` as that would not allow multiple instances of the system. - #[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] - struct PropagateTransformsSet; - app.register_type::() .register_type::() .add_plugin(ValidParentCheckPlugin::::default()) @@ -105,21 +105,22 @@ impl Plugin for TransformPlugin { schedule.configure_set( TransformSystem::TransformPropagate.in_base_set(StartupSet::PostStartup), ); + propagate_in_schedule(schedule); }) - // FIXME: https://github.com/bevyengine/bevy/issues/4381 - // These systems cannot access the same entities, - // due to subtle query filtering that is not yet correctly computed in the ambiguity detector - .add_startup_system( - sync_simple_transforms - .in_set(TransformSystem::TransformPropagate) - .ambiguous_with(PropagateTransformsSet), - ) - .add_startup_system(propagate_transforms.in_set(PropagateTransformsSet)) - .add_system( - sync_simple_transforms - .in_set(TransformSystem::TransformPropagate) - .ambiguous_with(PropagateTransformsSet), - ) - .add_system(propagate_transforms.in_set(PropagateTransformsSet)); + .edit_schedule(CoreSchedule::FixedUpdate, propagate_in_schedule) + .edit_schedule(CoreSchedule::Main, propagate_in_schedule); } } + +fn propagate_in_schedule(schedule: &mut Schedule) { + // FIXME: https://github.com/bevyengine/bevy/issues/4381 + // These systems cannot access the same entities, + // due to subtle query filtering that is not yet correctly computed in the ambiguity detector + schedule + .add_system( + sync_simple_transforms + .in_set(TransformSystem::TransformPropagate) + .ambiguous_with(PropagateTransformsSet), + ) + .add_system(propagate_transforms.in_set(PropagateTransformsSet)); +}