Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }