private void UpdateNewEmitters(EntityManager mgr) { var newEmitters = new List <Entity>(); Entities .WithNone <ParticleEmitterInternal>() .ForEach((Entity e, ref ParticleEmitter particleEmitter) => { #if DEVELOPMENT if (!DevCheckParticleTemplate(mgr, e, particleEmitter.particle)) { return; } #endif newEmitters.Add(e); }); // Initialize new emitters and particle templates. foreach (var emitter in newEmitters) { var particleEmitter = mgr.GetComponentData <ParticleEmitter>(emitter); var emitterInternal = new ParticleEmitterInternal(); if (!mgr.HasComponent <Disabled>(particleEmitter.particle)) { mgr.AddComponentData(particleEmitter.particle, new Disabled()); } emitterInternal.particleTemplate = mgr.Instantiate(particleEmitter.particle); mgr.AddComponentData(emitterInternal.particleTemplate, new Particle()); var position = new Translation() { Value = float3.zero }; if (!mgr.HasComponent <Translation>(emitterInternal.particleTemplate)) { mgr.AddComponentData(emitterInternal.particleTemplate, position); } else { mgr.SetComponentData(emitterInternal.particleTemplate, position); } mgr.AddComponentData(emitterInternal.particleTemplate, new ParticleEmitterReference() { emitter = emitter }); mgr.AddComponentData(emitter, emitterInternal); } CleanupBurstEmitters(mgr); InitBurstEmitters(mgr); }
private void UpdateNewEmitters(EntityManager mgr) { Entities .WithStructuralChanges() .WithNone <ParticleEmitterInternal>() .ForEach((Entity e, ref ParticleEmitter particleEmitter) => { // Initialize new emitters mgr.AddBuffer <DynamicParticle>(e); var emitterInternal = new ParticleEmitterInternal(); emitterInternal.particleRenderer = CreateParticleRenderer(mgr, e); // if duration is invalid then set to default if (particleEmitter.Duration <= 0.0f) { particleEmitter.Duration = 5.0f; } uint seed = mgr.HasComponent <RandomSeed>(e) ? mgr.GetComponentData <RandomSeed>(e).Value : m_rand.NextUInt(); if (seed == 0) // Zero seed is invalid { seed = 1; } Random rand = new Random(seed); if (mgr.HasComponent <StartDelay>(e)) { emitterInternal.remainingDelay = rand.RandomRange(mgr.GetComponentData <StartDelay>(e).Delay); } mgr.AddComponentData(e, emitterInternal); mgr.AddComponentData(e, new Rng { rand = rand }); }).Run(); CleanupBurstEmitters(mgr); InitBurstEmitters(mgr); }