use crate::prelude::*;
use beet_core::prelude::*;
#[action(end_with::<T>)]
#[derive(Debug, Component, PartialEq, Eq)]
pub struct EndWith<T: EndEvent + Clone = Outcome>(pub T);
impl<T: EndEvent + Clone> EndWith<T> {}
fn end_with<T: EndEvent + Clone>(
ev: On<T::Run>,
mut commands: Commands,
action: Query<&EndWith<T>>,
) -> Result {
let target = ev.target();
let action = action.get(target)?;
commands.entity(target).trigger_target(action.0.clone());
Ok(())
}
#[cfg(test)]
mod test {
use crate::prelude::*;
use beet_core::prelude::*;
#[test]
fn works() {
let mut world = World::new();
let observed = observer_ext::observe_triggers::<Outcome>(&mut world);
world
.spawn(EndWith(Outcome::Pass))
.trigger_target(GetOutcome)
.flush();
observed.len().xpect_eq(1);
observed.get_index(0).unwrap().xpect_eq(Outcome::Pass);
}
}