Skip to content

JodaInteractive/bevy_pipe_affect

 
 

Repository files navigation

bevy_pipe_affect
Write systems as pure functions

Normally, Bevy systems perform some state changes as side effects. This crate enables you to instead return Effects as system output.

Effects define an ECS state transition. All common ECS operations have one or more Effect types provided in the library.

These "systems with effects" can then be .pipe(affect)-ed. The affect system will perform the state transition.

This enables a more functional code-style in bevy app development. User-written systems can all be read-only, pure functions. All mutability can be piped out of your code.

From the example rainbow-clear-color:

use bevy::prelude::*;
use bevy_pipe_affect::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(
            Update,
            pure(rainbow_clear_color) // pure() is optional, just forces the system to be read-only
                .pipe(affect),
        )
        .run();
}

/// This system defines the clear color as a pure function of time.
fn rainbow_clear_color(time: Res<Time>) -> impl Effect + use<> {
    let color = Color::hsv(time.elapsed_secs() * 20.0, 0.7, 0.7);
    res_set(ClearColor(color))
}

Documentation

Documentation for this library is available in two main places.

The following are good jumping-off points for beginners:

Cargo examples are also available in this repository:

$ cargo run --release --all-features --example example-name

Compatibility

bevy bevy_pipe_affect
0.17 0.1

License

Except where noted, all code in this repository is dual-licensed under either:

at your option.

About

Write systems as pure functions.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 99.7%
  • Shell 0.3%