use crate::ecs::Particles;
use bevy::prelude::*;
use bevy_enoki::prelude::ParticleSpawnerState;
use bevy_enoki::{ParticleEffectHandle, ParticleSpawner};
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>,
) {
for (_entity, mut handle, mut state, p) in &mut q {
*handle = ParticleEffectHandle(assets.load(&p.effect));
state.active = p.active;
}
}