bevy_event_extras 0.1.0

Event utilities for the Bevy game engine
Documentation
  • Coverage
  • 88.89%
    8 out of 9 items documented4 out of 8 items with examples
  • Size
  • Source code size: 152.84 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 5.8 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 7m 28s Average build duration of successful builds.
  • all releases: 7m 28s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • eatenpancreas/bevy_event_extras
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • eatenpancreas

bevy_event_extras

A small Bevy utility crate that extends App with ergonomic helpers for observer-based event propagation — including schedule-based triggers, single-condition propagators, and multi-condition propagators.


Motivation

Bevy's observer system is powerful, but common patterns — like "fire event B whenever event A fires", or "fire event C only after both event A and event B have fired" — require boilerplate. bevy_event_extras captures these patterns into a clean, chainable API directly on App.


Features

Helper Description
trigger_on Fire an observer event on a given schedule
add_propagator Re-trigger a new event whenever a given event fires
add_multicondition_propagator Re-trigger a new event only after a set of events have all fired

Example

use bevy::prelude::*;
use bevy_event_extras::*;

#[derive(Event)] struct AppStarted;
#[derive(Event)] struct AssetsReady;
#[derive(Event)] struct WorldReady;
#[derive(Event)] struct GameReady;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        // Fire AppStarted during PreStartup
        .trigger_on(PreStartup, || AppStarted)
        // Propagate AppStarted -> AssetsReady and WorldReady separately
        .add_propagator(|_: On<AppStarted>| AssetsReady)
        .add_propagator(|_: On<AppStarted>| WorldReady)
        // Only fire GameReady once BOTH AssetsReady and WorldReady have fired
        .add_multicondition_propagator(|conditions| {
            conditions
                .add::<AssetsReady>()
                .add::<WorldReady>()
                .then_call(GameReady)
        })
        .add_observer(|_: On<GameReady>| {
            info!("Game is ready!");
        })
        .run();
}

Notes

  • Order sensitivity: Conditions use a PreUpdate polling system, so there is a one-frame delay between all conditions being met and the output event firing.
  • Reset behavior: After the output event is triggered, all condition flags are reset to false. This makes multi-condition propagators suitable for recurring sequences.

License

MIT OR Apache-2.0