Пример #1
0
        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;

        }