protected override ParticleSettings CreateSettingsForExplosionSmoke()
        {
            ParticleSettings settings = new ParticleSettings();

            settings.EffectName = @"Effects/ParticleEffect";

            settings.TextureName = @"Textures/VioletParticle";

            settings.MaxParticles = 200;

            settings.Duration = TimeSpan.FromSeconds(4);

            settings.MinHorizontalVelocity = 0;
            settings.MaxHorizontalVelocity = 0.5f;

            settings.MinVerticalVelocity = -0.1f;
            settings.MaxVerticalVelocity = 0.5f;

            settings.Gravity = new Vector3(0, -0.2f, 0);

            settings.EndVelocity = 0;

            settings.MinColor = Color.LightGray;
            settings.MaxColor = Color.White;

            settings.MinRotateSpeed = -2;
            settings.MaxRotateSpeed = 2;

            settings.MinStartSize = 0.01f;
            settings.MaxStartSize = 0.02f;

            settings.MinEndSize = 0.05f;
            settings.MaxEndSize = 0.1f;

            settings.SourceBlend = Blend.SourceAlpha;
            settings.DestinationBlend = Blend.One;

            return settings;
        }
        protected override ParticleSettings CreateSettingsForExplosion()
        {
            ParticleSettings settings = new ParticleSettings();

            settings.EffectName = @"Effects/ParticleEffect";

            settings.TextureName = @"Textures/VioletParticle";

            settings.MaxParticles = 100;

            settings.Duration = TimeSpan.FromSeconds(2);
            settings.DurationRandomness = 1;

            settings.MinHorizontalVelocity = 0.2f;
            settings.MaxHorizontalVelocity = 0.3f;

            settings.MinVerticalVelocity = -0.2f;
            settings.MaxVerticalVelocity = 0.2f;

            settings.EndVelocity = 0;

            settings.MinColor = Color.DarkGray;
            settings.MaxColor = Color.Gray;

            settings.MinRotateSpeed = -1;
            settings.MaxRotateSpeed = 1;

            settings.MinStartSize = 0.1f;
            settings.MaxStartSize = 0.1f;

            settings.MinEndSize = 1;
            settings.MaxEndSize = 2;

            // Use additive blending.
            settings.SourceBlend = Blend.SourceAlpha;
            settings.DestinationBlend = Blend.One;

            return settings;
        }
        protected override ParticleSettings CreateSettingsForFire()
        {
            ParticleSettings settings = new ParticleSettings();

            settings.EffectName = @"Effects/ParticleEffect";

            settings.TextureName = @"Textures/BlueParticle";

            settings.MaxParticles = 1300;

            settings.Duration = TimeSpan.FromSeconds(1);

            settings.DurationRandomness = 1;

            settings.MinHorizontalVelocity = 0;
            settings.MaxHorizontalVelocity = 0.15f * scale;

            settings.MinVerticalVelocity = -0.1f * scale;
            settings.MaxVerticalVelocity = 0.1f * scale;

            // Set gravity upside down, so the flames will 'fall' upward.
            settings.Gravity = new Vector3(0, 0.15f * scale, 0);

            settings.MinColor = new Color(255, 255, 255, 10);
            settings.MaxColor = new Color(255, 255, 255, 40);

            settings.MinStartSize = 0.05f * scale;
            settings.MaxStartSize = 0.1f * scale;

            settings.MinEndSize = 0.1f * scale;
            settings.MaxEndSize = 0.4f * scale;

            // Use additive blending.
            settings.SourceBlend = Blend.SourceAlpha;
            settings.DestinationBlend = Blend.One;

            return settings;
        }
        protected override ParticleSettings CreateSettingsForSmokePlume()
        {
            ParticleSettings settings = new ParticleSettings();

            settings.EffectName = @"Effects/ParticleEffect";

            settings.TextureName = @"Textures/BlueParticle";

            settings.MaxParticles = 600;

            settings.Duration = TimeSpan.FromSeconds(3);

            settings.MinHorizontalVelocity = -0.05f * scale;
            settings.MaxHorizontalVelocity = 0.05f * scale;

            settings.MinVerticalVelocity = 0.2f * scale;
            settings.MaxVerticalVelocity = 0.4f * scale;

            // Create a wind effect by tilting the gravity vector sideways.
            settings.Gravity = new Vector3(0, -0.05f * scale, 0);

            settings.EndVelocity = 0.75f * scale;

            settings.MinRotateSpeed = -1;
            settings.MaxRotateSpeed = 1;

            settings.MinStartSize = 0.01f * scale;
            settings.MaxStartSize = 0.02f * scale;

            settings.MinEndSize = 0.02f * scale;
            settings.MaxEndSize = 0.04f * scale;

            settings.SourceBlend = Blend.SourceAlpha;
            settings.DestinationBlend = Blend.One;

            return settings;
        }
        protected override ParticleSettings CreateSettingsForTrail()
        {
            ParticleSettings settings = new ParticleSettings();

            settings.EffectName = @"Effects/ParticleEffect";

            settings.TextureName = @"Textures/VioletParticle";

            settings.MaxParticles = 1000;

            settings.Duration = TimeSpan.FromSeconds(3);

            settings.DurationRandomness = 1.5f;

            settings.EmitterVelocitySensitivity = 0.1f;

            settings.MinHorizontalVelocity = 0;
            settings.MaxHorizontalVelocity = 0.01f;

            settings.MinVerticalVelocity = -0.01f;
            settings.MaxVerticalVelocity = 0.01f;

            settings.MinColor = new Color(255, 255, 255, 50);
            settings.MaxColor = new Color(255, 255, 255, 90);

            settings.MinRotateSpeed = -4;
            settings.MaxRotateSpeed = 4;

            settings.MinStartSize = 0.05f;
            settings.MaxStartSize = 0.1f;

            settings.MinEndSize = 0.1f;
            settings.MaxEndSize = 0.4f;

            settings.SourceBlend = Blend.SourceAlpha;
            settings.DestinationBlend = Blend.One;

            return settings;
        }
 /// <summary>
 /// Derived particle system classes should override this method
 /// and use it to initalize their tweakable settings.
 /// </summary>
 protected abstract void InitializeSettings(ParticleSettings settings);