API to use EntityEvents with EntityComponentsTrigger
- Dominant language
- Rust
- Stars
- 48.2k
- Forks
- 4.8k
- Avg merge
- 3d 22h
- Merged PRs (30d)
- 161
Description
I'd like to improve API for EntityEvents with EntityCompontsTrigger
## What problem does this solve or what need does it fill?
Currently it's possible to create an observer like that for `Add` and a few other bevy entity events
```rust
fn on_add(
add: On
) {
// ...
}
```
But it's not possible to do that for custom EntityEvent easily. To achieve the same result for custom entity events, we currently have to make additional query call.
```rust
fn on_my_event(
my_event: On,
query: Query<&MyMarker>,
) {
if query.contains(my_event.entity) {
// ...
}
}
```
or make a workaround with custom commands extension that we call instead of regular `trigger()`
```rust
#[derive(EntityEvent)]
#[entity_event(trigger = EntityComponentsTrigger<'a>)]
pub struct MyEvent {
event: E,
}
pub(crate) trait TriggerMyEvent {
fn trigger_my_event(&mut self, event: MyEvent);
}
impl<'w, 's> TriggerMyEvent for Commands<'w, 's> {
fn trigger_my_event(&mut self, event: MyEvent) {
self.queue(move |world: &mut World| {
let Ok(iter) = world.inspect_entity(event.event_target())
else {
return
};
let ids = iter.map(|c| c.id()).collect::>();
world.trigger_with(event, EntityComponentsTrigger {
components: &ids,
});
});
}
}
```
## What solution would you like?
TL;DR;
I'd like `EntityEvents` with explicit `#[entity_event(trigger = EntityComponentsTrigger<'a>)]` to automatically add a full list of components to the trigger.
Contributor guide
Assessment
This issue has not been assessed yet.