Add condition negation (#7559)
# Objective Closes #7202 ## Solution ~~Introduce a `not` helper to pipe conditions. Opened mostly for discussion. Maybe create an extension trait with `not` method? Please, advice.~~ Introduce `not(condition)` condition that inverses the result of the passed. --- ## Changelog ### Added - `not` condition.
This commit is contained in:
parent
1b444975ed
commit
1ffeff19f9
@ -24,8 +24,11 @@ mod sealed {
|
||||
}
|
||||
|
||||
pub mod common_conditions {
|
||||
use crate::schedule::{State, States};
|
||||
use crate::system::{Res, Resource};
|
||||
use super::Condition;
|
||||
use crate::{
|
||||
schedule::{State, States},
|
||||
system::{In, IntoPipeSystem, ReadOnlySystem, Res, Resource},
|
||||
};
|
||||
|
||||
/// Generates a [`Condition`](super::Condition)-satisfying closure that returns `true`
|
||||
/// if the first time the condition is run and false every time after
|
||||
@ -105,4 +108,37 @@ pub mod common_conditions {
|
||||
None => false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Generates a [`Condition`](super::Condition) that inverses the result of passed one.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bevy_ecs::prelude::*;
|
||||
/// // Building a new schedule/app...
|
||||
/// let mut sched = Schedule::default();
|
||||
/// sched.add_system(
|
||||
/// // This system will never run.
|
||||
/// my_system.run_if(not(always_true))
|
||||
/// )
|
||||
/// // ...
|
||||
/// # ;
|
||||
/// # let mut world = World::new();
|
||||
/// # sched.run(&mut world);
|
||||
///
|
||||
/// // A condition that always returns true.
|
||||
/// fn always_true() -> bool {
|
||||
/// true
|
||||
/// }
|
||||
/// #
|
||||
/// # fn my_system() { unreachable!() }
|
||||
/// ```
|
||||
pub fn not<Params, C: Condition<Params>>(
|
||||
condition: C,
|
||||
) -> impl ReadOnlySystem<In = (), Out = bool>
|
||||
where
|
||||
C::System: ReadOnlySystem,
|
||||
{
|
||||
condition.pipe(|In(val): In<bool>| !val)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user