mirror of
https://github.com/bevyengine/bevy
synced 2025-02-16 22:18:33 +00:00
Some small changes related to run criteria piping (#3923)
Remove the 'chaining' api, as it's peculiar ~~Implement the label traits for `Box<dyn ThatTrait>` (n.b. I'm not confident about this change, but it was the quickest path to not regressing)~~ Remove the need for '`.system`' when using run criteria piping
This commit is contained in:
parent
9d54f33974
commit
21a875d67b
4 changed files with 29 additions and 66 deletions
|
@ -29,8 +29,8 @@ pub mod prelude {
|
|||
query::{Added, AnyOf, ChangeTrackers, Changed, Or, QueryState, With, Without},
|
||||
schedule::{
|
||||
AmbiguitySetLabel, ExclusiveSystemDescriptorCoercion, ParallelSystemDescriptorCoercion,
|
||||
RunCriteria, RunCriteriaDescriptorCoercion, RunCriteriaLabel, RunCriteriaPiping,
|
||||
Schedule, Stage, StageLabel, State, SystemLabel, SystemSet, SystemStage,
|
||||
RunCriteria, RunCriteriaDescriptorCoercion, RunCriteriaLabel, Schedule, Stage,
|
||||
StageLabel, State, SystemLabel, SystemSet, SystemStage,
|
||||
},
|
||||
system::{
|
||||
Commands, In, IntoChainSystem, IntoExclusiveSystem, IntoSystem, Local, NonSend,
|
||||
|
|
|
@ -240,12 +240,6 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl IntoRunCriteria<BoxedRunCriteriaLabel> for BoxedRunCriteriaLabel {
|
||||
fn into(self) -> RunCriteriaDescriptorOrLabel {
|
||||
RunCriteriaDescriptorOrLabel::Label(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<L> IntoRunCriteria<BoxedRunCriteriaLabel> for L
|
||||
where
|
||||
L: RunCriteriaLabel,
|
||||
|
@ -357,44 +351,16 @@ pub struct RunCriteria {
|
|||
impl RunCriteria {
|
||||
/// Constructs a new run criteria that will retrieve the result of the criteria `label`
|
||||
/// and pipe it as input to `system`.
|
||||
pub fn pipe(
|
||||
pub fn pipe<P>(
|
||||
label: impl RunCriteriaLabel,
|
||||
system: impl System<In = ShouldRun, Out = ShouldRun>,
|
||||
system: impl IntoSystem<ShouldRun, ShouldRun, P>,
|
||||
) -> RunCriteriaDescriptor {
|
||||
label.pipe(system)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait RunCriteriaPiping {
|
||||
/// See [`RunCriteria::pipe()`].
|
||||
// TODO: Support `IntoSystem` here instead, and stop using
|
||||
// `IntoSystem::into_system` in the call sites
|
||||
fn pipe(self, system: impl System<In = ShouldRun, Out = ShouldRun>) -> RunCriteriaDescriptor;
|
||||
}
|
||||
|
||||
impl RunCriteriaPiping for BoxedRunCriteriaLabel {
|
||||
fn pipe(self, system: impl System<In = ShouldRun, Out = ShouldRun>) -> RunCriteriaDescriptor {
|
||||
RunCriteriaDescriptor {
|
||||
system: RunCriteriaSystem::Piped(Box::new(system)),
|
||||
system: RunCriteriaSystem::Piped(Box::new(IntoSystem::into_system(system))),
|
||||
label: None,
|
||||
duplicate_label_strategy: DuplicateLabelStrategy::Panic,
|
||||
before: vec![],
|
||||
after: vec![self],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<L> RunCriteriaPiping for L
|
||||
where
|
||||
L: RunCriteriaLabel,
|
||||
{
|
||||
fn pipe(self, system: impl System<In = ShouldRun, Out = ShouldRun>) -> RunCriteriaDescriptor {
|
||||
RunCriteriaDescriptor {
|
||||
system: RunCriteriaSystem::Piped(Box::new(system)),
|
||||
label: None,
|
||||
duplicate_label_strategy: DuplicateLabelStrategy::Panic,
|
||||
before: vec![],
|
||||
after: vec![Box::new(self)],
|
||||
after: vec![Box::new(label)],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -946,10 +946,10 @@ mod tests {
|
|||
query::{ChangeTrackers, Changed},
|
||||
schedule::{
|
||||
BoxedSystemLabel, ExclusiveSystemDescriptorCoercion, ParallelSystemDescriptorCoercion,
|
||||
RunCriteria, RunCriteriaDescriptorCoercion, RunCriteriaPiping, ShouldRun,
|
||||
SingleThreadedExecutor, Stage, SystemSet, SystemStage,
|
||||
RunCriteria, RunCriteriaDescriptorCoercion, ShouldRun, SingleThreadedExecutor, Stage,
|
||||
SystemSet, SystemStage,
|
||||
},
|
||||
system::{In, IntoExclusiveSystem, IntoSystem, Local, Query, ResMut},
|
||||
system::{In, IntoExclusiveSystem, Local, Query, ResMut},
|
||||
world::World,
|
||||
};
|
||||
|
||||
|
@ -1475,25 +1475,25 @@ mod tests {
|
|||
ShouldRun::No
|
||||
}
|
||||
}
|
||||
let mut stage = SystemStage::parallel()
|
||||
.with_system(make_parallel(0).label("0"))
|
||||
.with_system(
|
||||
make_parallel(1)
|
||||
.label("1")
|
||||
.after("0")
|
||||
.with_run_criteria(every_other_time.label("every other time")),
|
||||
)
|
||||
.with_system(make_parallel(2).label("2").after("1").with_run_criteria(
|
||||
RunCriteria::pipe("every other time", IntoSystem::into_system(eot_piped)),
|
||||
))
|
||||
.with_system(
|
||||
make_parallel(3).label("3").after("2").with_run_criteria(
|
||||
"every other time"
|
||||
.pipe(IntoSystem::into_system(eot_piped))
|
||||
.label("piped"),
|
||||
),
|
||||
)
|
||||
.with_system(make_parallel(4).after("3").with_run_criteria("piped"));
|
||||
let mut stage =
|
||||
SystemStage::parallel()
|
||||
.with_system(make_parallel(0).label("0"))
|
||||
.with_system(
|
||||
make_parallel(1)
|
||||
.label("1")
|
||||
.after("0")
|
||||
.with_run_criteria(every_other_time.label("every other time")),
|
||||
)
|
||||
.with_system(
|
||||
make_parallel(2)
|
||||
.label("2")
|
||||
.after("1")
|
||||
.with_run_criteria(RunCriteria::pipe("every other time", eot_piped)),
|
||||
)
|
||||
.with_system(make_parallel(3).label("3").after("2").with_run_criteria(
|
||||
RunCriteria::pipe("every other time", eot_piped).label("piped"),
|
||||
))
|
||||
.with_system(make_parallel(4).after("3").with_run_criteria("piped"));
|
||||
for _ in 0..4 {
|
||||
stage.run(&mut world);
|
||||
}
|
||||
|
|
|
@ -70,10 +70,7 @@ fn main() {
|
|||
// Here we create a _not done_ criteria by piping the output of
|
||||
// the `is_done` system and inverting the output.
|
||||
// Notice a string literal also works as a label.
|
||||
.with_run_criteria(RunCriteria::pipe(
|
||||
"is_done_label",
|
||||
IntoSystem::into_system(inverse),
|
||||
))
|
||||
.with_run_criteria(RunCriteria::pipe("is_done_label", inverse))
|
||||
// `collision` and `sfx` are not ordered with respect to
|
||||
// each other, and may run in any order
|
||||
.with_system(collision)
|
||||
|
|
Loading…
Add table
Reference in a new issue