# bevy_spawn_observer
[](https://crates.io/crates/bevy_spawn_observer)
[](https://docs.rs/bevy_spawn_observer/latest/bevy_spawn_observer/)
[](https://github.com/benfrankel/bevy_spawn_observer)
> [!WARNING]
> This crate is no longer maintained and will not be updated to new versions of Bevy past 0.18.
>
> You can already use the experimental [`bevy::ui_widgets::observe`](https://docs.rs/bevy/latest/bevy/ui_widgets/fn.observe.html)
> since 0.17, and a proper upstream solution is expected to land at some point
> (see [#14204](https://github.com/bevyengine/bevy/issues/14204) and [#17607](https://github.com/bevyengine/bevy/issues/17607)).
This crate provides [`SpawnObserver`](https://docs.rs/bevy_spawn_observer/latest/bevy_spawn_observer/struct.SpawnObserver.html),
a custom [`SpawnableList`](https://docs.rs/bevy/latest/bevy/ecs/spawn/trait.SpawnableList.html)
enabling you to add observers to your bundles.
```rust
use bevy::{ecs::spawn::SpawnWith, prelude::*};
use bevy_spawn_observer::SpawnObserver;
// With `bevy_spawn_observer`:
fn button_new() -> impl Bundle {
(
Button,
Children::spawn(SpawnObserver::new(|_: Trigger<Pointer<Click>>| {
info!("You clicked me!");
})),
)
}
// Without `bevy_spawn_observer`:
fn button_old() -> impl Bundle {
(
Node::default(),
Children::spawn(SpawnWith(|parent: &mut ChildSpawner| {
parent.spawn(Button).observe(|_: Trigger<Pointer<Click>>| {
info!("You clicked me!");
});
})),
)
}
```
See a full example [here](https://github.com/benfrankel/bevy_spawn_observer/blob/main/examples/buttons.rs).
# Bevy version compatibility
| 0.18 | 0.3 |
| 0.17 | 0.2 |
| 0.16 | 0.1 |
# License
This crate is available under either of [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-Apache-2.0) at your choice.