private ParticleSystemBundle GetParticle(ParticleType p)
    {
        ParticleSystemBundle res = particleSystems[(int)p];

        if (res == null)
        {
            Debug.LogWarning("Particle " + p + " not found");
        }
        return(res);
    }
    private void ProcessParticleRequests()
    {
        foreach (NativeQueue <ParticleRequest> particleRequestQueue in particleRequestQueues)
        {
            while (particleRequestQueue.TryDequeue(out ParticleRequest req))
            {
                // get the particles
                ParticleSystemBundle bundle = GetParticle(req.type);

                if (bundle != null)
                {
                    // play the particle system at the request's position
                    ParticleSystem.EmitParams param = new ParticleSystem.EmitParams();
                    param.position             = req.position;
                    param.applyShapeToPosition = true;
                    bundle.Emit(param);
                }
            }
            particleRequestQueue.Dispose();
        }
        particleRequestQueues.Clear();
    }