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>, assets: Res, 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, >, assets: Res, ) { for (_entity, mut handle, mut state, p) in &mut q { *handle = ParticleEffectHandle(assets.load(&p.effect)); state.active = p.active; } }