public override void Removed()
        {
            // Create paff
            Particle paff = new Particle(X, Y, Assets.GFX_LASERBREAK, 18, 17);

            paff.LifeSpan = 10.0f;
            paff.FrameCount = 4;
            paff.FinalAlpha = 0.6f;
            paff.Image.CenterOrigin();

            this.Scene.Add(paff);

            base.Removed();
        }
        public override void Removed()
        {
            // Create paff
            Particle paff = new Particle(X, Y, Assets.GFX_MISSILEBREAK, 32, 32);

            paff.LifeSpan = 10.0f;
            paff.FrameCount = 6;
            paff.FinalAlpha = 1.0f;
            paff.Image.CenterOrigin();

            this.Scene.Add(paff);
            Sound bip = new Sound(Assets.SFX_BOOM);
            bip.Volume = 0.9f;
            bip.Pitch = Rand.Float(0.8f, 1.2f);
            bip.Play();

            base.Removed();
        }
        public override void Update()
        {
            base.Update();


            if(isEmitting)
            {

                for (int i = 0; i < emitAmount; i++)
                {
                    // Create a particle!
                    Particle newParticle = new Particle(this.X, this.Y, imageSource, imageWidth, imageHeight);
                    newParticle.LifeSpan = particleLifetime;

                    // Figure out the final X and Y positions of this particle
                    // Based on angle, distance jitter etc
                    float thisAngle = this.emitAngle + (Rand.Float(-emitAngleJitter, emitAngleJitter));
                    float thisDistance = this.emitDistance + (Rand.Float(-emitDistanceJitter, emitDistanceJitter));

                    thisAngle = thisAngle * ((float)Math.PI / 180.0f);

                    newParticle.FinalX = this.X + (float)Math.Sin(thisAngle) * thisDistance;
                    newParticle.FinalY = this.Y + (float)Math.Cos(thisAngle) * thisDistance;

                    if(particleMovementInverted) // Move from outside inwards
                    {
                        // Can't pass properties by reference in C#
                        float finalX = newParticle.FinalX;
                        float finalY = newParticle.FinalY;
                        Utilities.Swap(ref finalX, ref this.X);
                        Utilities.Swap(ref finalY, ref this.Y);
                        newParticle.FinalX = finalX;
                        newParticle.FinalY = finalY;
                    }

                    newParticle.ScaleX = particleStartScale;
                    newParticle.ScaleY = particleStartScale;

                    newParticle.FinalScaleX = particleEndScale;
                    newParticle.FinalScaleY = particleEndScale;

					newParticle.Color = beginColour;
					newParticle.FinalColor = endColour;

					newParticle.Alpha = beginColour.A;
					newParticle.FinalAlpha = endColour.A;

                    newParticle.Angle = particleStartRotation;
                    newParticle.FinalAngle = particleEndRotation;

                    newParticle.Animate = particlesAnimated;
                    newParticle.FrameCount = numParticleFrames;
                    newParticle.FrameOffset = Rand.Int(0, numParticleFrames - 1);
                    newParticle.Loops = particleAnimLoops;

					// Draw particles on top of all but the HUD
					newParticle.Layer = 7;
                    newParticle.CenterOrigin = true;

					newParticle.Start(); // Initialize graphics
                    newParticle.Graphic.Shake = particleShake;

                    // Add to scene if global, and to system local space if local
                    //if (particleLocalSpace)
                   // {
                        activeLocalParticles.Add(newParticle);
                   // }
                    this.Scene.Add(newParticle);
                    
                }
            }



            // If we have local particles...
            if(particleLocalSpace)
            {
                foreach (Particle particle in activeLocalParticles)
                {
                    // Move the particles with the parent system
                    particle.FinalX += (X - oldX);
                    particle.FinalY += (Y - oldY);
					particle.Angle = Angle;
                }
            }

            // Update particle system's old position
            oldX = X;
            oldY = Y;

        }
        public override void Update()
        {
            base.Update();

            Graphic.Angle += Rand.Float(-25.0f, 25.0f);
            XSpeed = (float)Math.Cos(Graphic.Angle * (float)(Math.PI / 180.0)) * MissileSpeed;
            YSpeed = -(float)Math.Sin(Graphic.Angle * (float)(Math.PI / 180.0)) * MissileSpeed;
            X += XSpeed;
            Y += YSpeed;
            if(MissileSpeed < 16)
            {
                MissileSpeed += 0.3f * (MissileSpeed / 16);
            }

            // Check collisions
            if (Collider.Overlap(X, Y, 2) && RemoveTimer == -1)
            {
                // Bam, hit an enemy
                RemoveTimer = 1.0f;
                Global.theCamShaker.ShakeCamera(20f);
            }

            if(RemoveTimer != -1)
            {
                if (RemoveTimer <= 0)
                {
                    RemoveSelf();
                }
                RemoveTimer--;
            }

            Particle paff = new Particle(X, Y, Assets.GFX_BUBBLE, 10, 10);

            paff.LifeSpan = 10.0f;
            paff.FrameCount = 5;
            paff.FinalAlpha = 0.8f;
            paff.Image.CenterOrigin();

            this.Scene.Add(paff);
        }