use bevy::ecs::system::IntoObserverSystem;
use bevy::prelude::*;
use extend::ext;
#[ext(name=CoreWorldExtSweet)]
pub impl World {
fn with_observer<E: Event, B: Bundle, M>(
mut self,
system: impl IntoObserverSystem<E, B, M>,
) -> Self {
self.spawn(Observer::new(system));
self
}
fn observing<E: Event, B: Bundle, M>(
&mut self,
system: impl IntoObserverSystem<E, B, M>,
) -> &mut Self {
self.spawn(Observer::new(system));
self
}
fn flush_trigger<'a, E: Event<Trigger<'a>: Default>>(
&mut self,
event: E,
) -> &mut Self {
self.flush();
self.trigger(event);
self.flush();
self
}
}
#[extend::ext]
pub impl<'w> EntityWorldMut<'w> {
fn flush_trigger<'a, E: Event<Trigger<'a>: Default>>(
&mut self,
event: E,
) -> &mut Self {
unsafe {
let world = self.world_mut();
world.flush();
world.trigger(event);
world.flush();
}
self
}
}