use bevy::prelude::*;
use bevy_enoki::{ParticleEffectHandle, ParticleSpawner};
use bevy_enoki::prelude::ParticleSpawnerState;
use crate::ecs::Particles;
pub fn replicated_particles_plugin(app: &mut App) {
app.add_systems(PreUpdate, (replicate_new_particles, replicate_updated_particles));
}
fn replicate_new_particles(q: Query<(Entity, &Particles), Added<Particles>>, assets: Res<AssetServer>, mut commands: Commands) {
for (entity, p) in q.iter() {
commands.entity(entity)
.insert(ParticleSpawner::default())
.insert(ParticleEffectHandle(assets.load(&p.effect)))
.insert(ParticleSpawnerState {
active: p.active,
..default()
});
info!("replicate_new_particles {:?}", p);
}
}
fn replicate_updated_particles(mut q: Query<(Entity, &mut ParticleEffectHandle, &mut ParticleSpawnerState, &Particles), Changed<Particles>>, assets: Res<AssetServer>, mut commands: Commands ) {
for (_entity, mut handle, mut state, p) in q.iter_mut() {
*handle = ParticleEffectHandle(assets.load(&p.effect));
state.active = p.active;
}
}