system_closure/system_closure.rs
1//! Shows how anonymous functions / closures can be used as systems.
2
3use bevy::{log::LogPlugin, prelude::*};
4
5fn main() {
6 // create a simple closure.
7 let simple_closure = || {
8 // this is a closure that does nothing.
9 info!("Hello from a simple closure!");
10 };
11
12 // create a closure, with an 'input' value.
13 let complex_closure = |mut value: String| {
14 move || {
15 info!("Hello from a complex closure! {}", value);
16
17 // we can modify the value inside the closure. this will be saved between calls.
18 value = format!("{value} - updated");
19
20 // you could also use an outside variable like presented in the inlined closures
21 // info!("outside_variable! {}", outside_variable);
22 }
23 };
24
25 let outside_variable = "bar".to_string();
26
27 App::new()
28 .add_plugins(LogPlugin::default())
29 // we can use a closure as a system
30 .add_systems(Update, simple_closure)
31 // or we can use a more complex closure, and pass an argument to initialize a Local variable.
32 .add_systems(Update, complex_closure("foo".into()))
33 // we can also inline a closure
34 .add_systems(Update, || {
35 info!("Hello from an inlined closure!");
36 })
37 // or use variables outside a closure
38 .add_systems(Update, move || {
39 info!(
40 "Hello from an inlined closure that captured the 'outside_variable'! {}",
41 outside_variable
42 );
43 // you can use outside_variable, or any other variables inside this closure.
44 // their states will be saved.
45 })
46 .run();
47}