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 {
|
pub mod common_conditions {
|
||||||
use crate::schedule::{State, States};
|
use super::Condition;
|
||||||
use crate::system::{Res, Resource};
|
use crate::{
|
||||||
|
schedule::{State, States},
|
||||||
|
system::{In, IntoPipeSystem, ReadOnlySystem, Res, Resource},
|
||||||
|
};
|
||||||
|
|
||||||
/// Generates a [`Condition`](super::Condition)-satisfying closure that returns `true`
|
/// Generates a [`Condition`](super::Condition)-satisfying closure that returns `true`
|
||||||
/// if the first time the condition is run and false every time after
|
/// if the first time the condition is run and false every time after
|
||||||
@ -105,4 +108,37 @@ pub mod common_conditions {
|
|||||||
None => false,
|
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