23 lines
637 B
Rust
23 lines
637 B
Rust
|
use bevy::{
|
||
|
ecs::{system::Command, world::EntityMut},
|
||
|
prelude::*,
|
||
|
};
|
||
|
|
||
|
struct RunIfExistsCommand<F>(Entity, F);
|
||
|
|
||
|
impl<F: FnOnce(EntityMut) + Send + Sync + 'static> Command for RunIfExistsCommand<F> {
|
||
|
fn write(self, world: &mut World) {
|
||
|
world.get_entity_mut(self.0).map(self.1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub trait RunIfExistsExt {
|
||
|
fn run_if_exists(&mut self, entity: Entity, f: impl FnOnce(EntityMut) + Send + Sync + 'static);
|
||
|
}
|
||
|
|
||
|
impl RunIfExistsExt for Commands<'_, '_> {
|
||
|
fn run_if_exists(&mut self, entity: Entity, f: impl FnOnce(EntityMut) + Send + Sync + 'static) {
|
||
|
self.add(RunIfExistsCommand(entity, f));
|
||
|
}
|
||
|
}
|