diff --git a/crates/bevy_ecs/src/schedule/system_descriptor.rs b/crates/bevy_ecs/src/schedule/system_descriptor.rs index 5fc776f1f14855..17d25e0a1dfac0 100644 --- a/crates/bevy_ecs/src/schedule/system_descriptor.rs +++ b/crates/bevy_ecs/src/schedule/system_descriptor.rs @@ -126,6 +126,9 @@ pub trait ParallelSystemDescriptorCoercion { /// Assigns a label to the system; there can be more than one, and it doesn't have to be unique. fn label(self, label: impl SystemLabel) -> ParallelSystemDescriptor; + /// Removes the specified label from this system. Does nothing if the label is not present. + fn ignoring(self, label: impl SystemLabel) -> ParallelSystemDescriptor; + /// Specifies that the system should run before systems with the given label. fn before(self, label: impl AsSystemLabel) -> ParallelSystemDescriptor; @@ -151,6 +154,12 @@ impl ParallelSystemDescriptorCoercion<()> for ParallelSystemDescriptor { self } + fn ignoring(mut self, label: impl SystemLabel) -> ParallelSystemDescriptor { + let label = label.as_label(); + self.labels.retain(|item| item != &label); + self + } + fn before(mut self, label: impl AsSystemLabel) -> ParallelSystemDescriptor { self.before.push(label.as_system_label().as_label()); self @@ -183,6 +192,10 @@ where new_parallel_descriptor(Box::new(IntoSystem::into_system(self))).label(label) } + fn ignoring(self, label: impl SystemLabel) -> ParallelSystemDescriptor { + new_parallel_descriptor(Box::new(IntoSystem::into_system(self))).ignoring(label) + } + fn before(self, label: impl AsSystemLabel) -> ParallelSystemDescriptor { new_parallel_descriptor(Box::new(IntoSystem::into_system(self))).before(label) } @@ -208,6 +221,10 @@ impl ParallelSystemDescriptorCoercion<()> for BoxedSystem<(), ()> { new_parallel_descriptor(self).label(label) } + fn ignoring(self, label: impl SystemLabel) -> ParallelSystemDescriptor { + new_parallel_descriptor(self).ignoring(label) + } + fn before(self, label: impl AsSystemLabel) -> ParallelSystemDescriptor { new_parallel_descriptor(self).before(label) } @@ -262,6 +279,9 @@ pub trait ExclusiveSystemDescriptorCoercion { /// Assigns a label to the system; there can be more than one, and it doesn't have to be unique. fn label(self, label: impl SystemLabel) -> ExclusiveSystemDescriptor; + /// Removes the specified label from this system. Does nothing if the label is not present. + fn ignoring(self, label: impl SystemLabel) -> ExclusiveSystemDescriptor; + /// Specifies that the system should run before systems with the given label. fn before(self, label: impl SystemLabel) -> ExclusiveSystemDescriptor; @@ -297,6 +317,12 @@ impl ExclusiveSystemDescriptorCoercion for ExclusiveSystemDescriptor { self } + fn ignoring(mut self, label: impl SystemLabel) -> ExclusiveSystemDescriptor { + let label = label.as_label(); + self.labels.retain(|item| item != &label); + self + } + fn before(mut self, label: impl SystemLabel) -> ExclusiveSystemDescriptor { self.before.push(label.as_label()); self @@ -343,6 +369,10 @@ where new_exclusive_descriptor(Box::new(self)).label(label) } + fn ignoring(self, label: impl SystemLabel) -> ExclusiveSystemDescriptor { + new_exclusive_descriptor(Box::new(self)).ignoring(label) + } + fn before(self, label: impl SystemLabel) -> ExclusiveSystemDescriptor { new_exclusive_descriptor(Box::new(self)).before(label) }