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); }