private void CreateBurst()
        {
            if (ParticleRegistrationCallback != null)
            {
                // Check if we have not set up any tints/fadepoints/emission offsets and put in some defaults if we have not
                if (Tints.Count < 1) { Tints.Add(Color.White); }
                if (_sortedFadePoints.Count < 1)
                {
                    if (_fadePoints != null) { _sortedFadePoints = _fadePoints.OrderBy(fp => fp.X).ToList(); }
                    else { _sortedFadePoints.Add(new Vector2(0.0f, 1.0f)); _sortedFadePoints.Add(new Vector2(1.0f, 0.0f)); }
                }
                if (EmissionPointOffsets.Count < 1) { EmissionPointOffsets.Add(Vector2.Zero); }

                for (int i = 0; i < _particlesPerBurst; i++)
                {
                    Particle newParticle = new Particle();
                    newParticle.Duration = _lifespanRange.RandomValue;
                    newParticle.WorldPosition = WorldPosition + EmissionPointOffsets[(int)Random.Generator.Next(EmissionPointOffsets.Count)];
                    newParticle.CameraPosition = CameraPosition;

                    newParticle.Texture = ParticleTexture;
                    newParticle.Frame = ParticleTexture.Bounds;
                    newParticle.Origin = new Vector2(ParticleTexture.Width, ParticleTexture.Height) / 2.0f;
                    newParticle.RenderDepth = RenderDepth;
                    newParticle.Tint = Tints[(int)Random.Generator.Next(Tints.Count)] * _sortedFadePoints[0].Y;
                    newParticle.FadePoints = _sortedFadePoints;
                    newParticle.Visible = true;

                    newParticle.Direction = Direction + Random.Generator.Next(-Spread, Spread);
                    newParticle.Gravity = _gravity;
                    newParticle.GravityAccelerator = _gravityAccelerator;
                    newParticle.Speed = _speedLaunchRange.RandomValue;
                    newParticle.SpeedDelta = _speedDeltaRange.RandomValue;
                    newParticle.SpeedAccelerator = _speedAcceleratorRange.RandomValue;

                    newParticle.Rotation = _rotationLaunchRange.RandomValue;
                    newParticle.RotationDelta = _rotationDeltaRange.RandomValue;
                    newParticle.RotationAccelerator = _rotationAcceleratorRange.RandomValue;

                    newParticle.Scale = _scaleLaunchRange.RandomValue;
                    newParticle.ScaleDelta = _scaleDeltaRange.RandomValue;
                    newParticle.ScaleAccelerator = _scaleDeltaRange.RandomValue;

                    ParticleRegistrationCallback(newParticle);
                }

                _burstCount = Math.Max(-1, _burstCount - 1);
                if ((_burstCount != 0) && (_timerRegistered)) { _burstTimer.NextActionDuration = _burstIntervalInMilliseconds; }
            }
        }
 public void RegisterParticle(Particle toRegister)
 {
     _particles.Add(toRegister);
 }