mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
Add or_else combinator to run_conditions.rs (#8714)
# Objective - Showcase the use of `or_else()` as requested. Fixes https://github.com/bevyengine/bevy/issues/8702 ## Solution - Add an uninitialized resource `Unused` - Use `or_else()` to evaluate a second run condition - Add documentation explaining how `or_else()` works
This commit is contained in:
parent
233b26cc17
commit
4ce37395da
1 changed files with 15 additions and 7 deletions
|
@ -18,15 +18,20 @@ fn main() {
|
|||
// The common_conditions module has a few useful run conditions
|
||||
// for checking resources and states. These are included in the prelude.
|
||||
.run_if(resource_exists::<InputCounter>())
|
||||
// `.or_else()` is a run condition combinator that only evaluates the second condition
|
||||
// if the first condition returns `false`. This behavior is known as "short-circuiting",
|
||||
// and is how the `||` operator works in Rust (as well as most C-family languages).
|
||||
// In this case, the `has_user_input` run condition will be evaluated since the `Unused` resource has not been initialized.
|
||||
.run_if(resource_exists::<Unused>().or_else(
|
||||
// This is a custom run condition, defined using a system that returns
|
||||
// a `bool` and which has read-only `SystemParam`s.
|
||||
// Both run conditions must return `true` in order for the system to run.
|
||||
// Note that this second run condition will be evaluated even if the first returns `false`.
|
||||
.run_if(has_user_input),
|
||||
has_user_input,
|
||||
)),
|
||||
print_input_counter
|
||||
// `.and_then()` is a run condition combinator that only evaluates the second condition
|
||||
// if the first condition returns `true`. This behavior is known as "short-circuiting",
|
||||
// and is how the `&&` operator works in Rust (as well as most C-family languages).
|
||||
// if the first condition returns `true`, analogous to the `&&` operator.
|
||||
// In this case, the short-circuiting behavior prevents the second run condition from
|
||||
// panicking if the `InputCounter` resource has not been initialized.
|
||||
.run_if(resource_exists::<InputCounter>().and_then(
|
||||
|
@ -51,6 +56,9 @@ fn main() {
|
|||
#[derive(Resource, Default)]
|
||||
struct InputCounter(usize);
|
||||
|
||||
#[derive(Resource)]
|
||||
struct Unused;
|
||||
|
||||
/// Return true if any of the defined inputs were just pressed.
|
||||
/// This is a custom run condition, it can take any normal system parameters as long as
|
||||
/// they are read only (except for local parameters which can be mutable).
|
||||
|
|
Loading…
Reference in a new issue