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