wait::output
The wait::output
action continues to execute a system every frame until it returns Option::Some
. The contents of Some
will be the return value of the task. This action provides more flexibility than wait::until
by allowing you to return a value when the waiting condition is met.
Usage
#![allow(unused)] fn main() { use bevy::prelude::*; use bevy_flurx::prelude::*; Reactor::schedule(|task| async move { let result = task.will(Update, wait::output(|world: &mut World| { // Your logic here Some("Result value") // Return Some when condition is met })).await; println!("Got result: {}", result); }); }
Parameters
system
: Any valid Bevy system that returns anOption<T>
Return Value
The action returns the value inside the Some
variant when the system returns Some
.
Example: Waiting for a Counter with Result
#![allow(unused)] fn main() { use bevy::prelude::*; use bevy_flurx::prelude::*; Reactor::schedule(|task| async move { let count = task.will(Update, wait::output(|mut count: Local<usize>| { *count += 1; if *count == 4 { Some(*count) // Return the count when it reaches 4 } else { None } })).await; // This code runs after the counter reaches 4 println!("Counter reached: {}", count); }); }
Example: Finding an Entity
#![allow(unused)] fn main() { use bevy::prelude::*; use bevy_flurx::prelude::*; #[derive(Component)] struct Target; Reactor::schedule(|task| async move { let entity = task.will(Update, wait::output(|query: Query<Entity, With<Target>>| { query.iter().next().map(|e| e) // Return the first entity with Target component })).await; // This code runs after a Target entity is found println!("Found target entity: {:?}", entity); }); }
When to Use
Use wait::output
when you need to:
- Wait for a condition and get a value when the condition is met
- Find an entity or resource that meets certain criteria
- Collect data that becomes available at an unpredictable time
- Implement custom waiting logic that needs to return a value
For simpler cases where you just need to wait for a condition without returning a value, consider using wait::until
instead.