IEnumerator Pop()
    {
        /* A manipulator using events will contain a list of all its particles in form of List<ManipulatorParticle>
         * where each item has a particle system id and a particle id.
         * When using manipulator.GetParticles() the list will be converted into List<PlaygroundEventParticle> and
         * contain detailed information about each particle currently inside its shape.
         */

        // Get the list of particles inside the manipulator
        List <PlaygroundEventParticle> manipulatorParticles = manipulator.GetParticles();

        // Work through the list and emit popParticles and popTurbulenceParticles
        foreach (PlaygroundEventParticle particle in manipulatorParticles)
        {
            popParticles.Emit(particle.position, particle.velocity, particle.color);
            for (int i = 0; i < 5; i++)
            {
                popTurbulenceParticles.Emit(particle.position, particle.velocity + RandomV3(), particle.color);
            }
        }

        // Kill all tracked particles within the Manipulator
        manipulator.KillAllParticles();

        // This part is just for the gui text
        if (manipulatorParticles.Count > 0)
        {
            if (manipulatorParticles.Count > highestPop)
            {
                popTextColor.a = 1f;
                popText.color  = popTextColor;
                highestPop     = manipulatorParticles.Count;
                popText.text   = highestPop.ToString();
                Vector2 pixelOffset = mainCamera.WorldToScreenPoint(manipulatorTransform.position);
                pixelOffset.y      += 50;
                popText.pixelOffset = pixelOffset;

                int highestNow = highestPop;
                while (popTextColor.a > 0 && highestNow == highestPop)
                {
                    popTextColor.a -= .5f * Time.deltaTime;
                    popText.color   = popTextColor;
                    yield return(null);
                }
            }
        }
    }