/Rendering/EffectTests/Tutorials.cs
# · C# · 393 lines · 294 code · 22 blank · 77 comment · 5 complexity · 390d9adb9d97347ecde29360b2629280 MD5 · raw file
- using Delta.ContentSystem.Rendering;
- using Delta.ContentSystem.Rendering.Helpers;
- using Delta.Engine;
- using Delta.Engine.Game;
- using Delta.InputSystem;
- using Delta.Rendering.Basics.Drawing;
- using Delta.Rendering.Basics.Fonts;
- using Delta.Rendering.Basics.Materials;
- using Delta.Rendering.Cameras;
- using Delta.Rendering.Effects;
- using Delta.Rendering.Effects.Modifiers;
- using Delta.Rendering.Enums;
- using Delta.Utilities.Datatypes;
- using Delta.Utilities.Helpers;
- using Delta.Utilities.Math;
- using NUnit.Framework;
-
- namespace Delta.Rendering.EffectTests
- {
- /// <summary>
- /// Effect tutorials.
- /// </summary>
- public class Tutorials
- {
- #region FireEffect (Static)
- /// <summary>
- /// Tutorial: Particle Effect Tutorial 1: Fire Effect
- /// Difficulty: Medium
- /// Description: Draw a simple fire effect.
- /// Image: http://DeltaEngine.net/Icons/EffectTutorial1.png
- /// </summary>
- [Test, Category("Visual")]
- public static void FireEffect()
- {
- // Create a new template.
- EffectData data = EffectData.Get("<FireEffect>");
-
- // Add emitters and modifiers.
- EmitterData emitter = new EmitterData();
- emitter.Modifiers.Add(new SpawnIntervalModifier
- {
- SpawnInterval = 0.05f,
- });
- emitter.Modifiers.Add(new ParticleLifetimeModifier
- {
- ParticleLifetime = 3f
- });
- emitter.Modifiers.Add(new TimeRangeModifier
- {
- TimeRange = new Range(0f, float.PositiveInfinity),
- });
- Graph alphaFade = new Graph();
- alphaFade.Add(0f, 0f);
- alphaFade.Add(0.1f, 1f);
- alphaFade.Add(1f, 0f);
- emitter.Modifiers.Add(new FadeModifier
- {
- AdvancedAlphaFade = alphaFade,
- });
- emitter.Modifiers.Add(new SizeModifier
- {
- WidthRange = new Range(1f, 0.05f),
- HeightRange = new Range(1f, 0.05f),
- });
- emitter.Modifiers.Add(new MaterialModifier
- {
- Material = new Material2DColored(
- "FlamesAdditive"),
- //"SmokeAdditive")
- //{
- //BlendColor = new Color(1f, 0.5f, 0f),
- //},
- });
- emitter.Modifiers.Add(new RandomSpawnOffsetModifier
- {
- MinOffset = new Vector(-0.02f, 0f, 0f),
- MaxOffset = new Vector(0.02f, 0f, 0f),
- });
- emitter.Modifiers.Add(new RandomVelocityModifier
- {
- MinVelocity = new Vector(-0.01f, -0.08f, 0f),
- MaxVelocity = new Vector(0.01f, -0.1f, 0f),
- });
- data.Emitters.Add(emitter);
-
- //Effect.Spawn(data, new Vector(0.5f, 0.5f, 0f));
- // Always follow the mouse :)
- Effect.Spawn(data, new MouseTracker());
-
- Application.Start();
- }
- #endregion
-
- #region SmokeEffect (Static)
- /// <summary>
- /// Tutorial: Particle Effect Tutorial 2: Smoke Effect
- /// Difficulty: Medium
- /// Description: Draw a simple smoke effect.
- /// Image: http://DeltaEngine.net/Icons/EffectTutorial2.png
- /// </summary>
- [Test, Category("Visual")]
- public static void SmokeEffect()
- {
- // Create a new template.
- EffectData data = EffectData.Get("<SmokeEffect>");
- // Add an emitter and modifiers.
- EmitterData emitter = new EmitterData();
- emitter.Modifiers.Add(new SpawnIntervalModifier
- {
- SpawnInterval = 0.05f,
- });
- emitter.Modifiers.Add(new ParticleLifetimeModifier
- {
- ParticleLifetime = 2f
- });
- emitter.Modifiers.Add(new TimeRangeModifier
- {
- TimeRange = new Range(0f, float.PositiveInfinity),
- });
- emitter.Modifiers.Add(new FadeModifier
- {
- // Create simple graph for fading in and out!
- AdvancedAlphaFade =
- new Graph().Add(0, 0).Add(0.25f, 1.0f).Add(1.0f, 0.0f),
- });
- emitter.Modifiers.Add(new MaterialModifier
- {
- Material = new Material2DColored(
- //"SmokeBrightTransparency"),
- "Smoke"),
- //"SmokeAdditive"),
- //"SmokeSmallAdditive"),
- });
- emitter.Modifiers.Add(new RandomVelocityModifier
- {
- MinVelocity = new Vector(-0.05f, -0.1f, 0f),
- MaxVelocity = new Vector(0.05f, -0.1f, 0f),
- });
- emitter.Modifiers.Add(new RandomRotationModifier
- {
- RotationRange = new Range(0, 360),
- });
- data.Emitters.Add(emitter);
- //Effect.Spawn(data, new Vector(0.5f, 0.5f, 0f));
- // Always follow the mouse :)
- Effect.Spawn(data, new MouseTracker());
-
- Application.Start();
- }
- #endregion
-
- #region RocketEffect (Static)
- /// <summary>
- /// Tutorial: Particle Effect Tutorial 3: Rocket Effect
- /// Difficulty: Medium
- /// Description: Draw a simple rocket effect.
- /// Image: http://DeltaEngine.net/Icons/EffectTutorial3.png
- /// </summary>
- [Test, Category("Visual")]
- public static void RocketEffect()
- {
- // Create a new template.
- EffectData data = EffectData.Get("<RocketEffect>");
- // Add an emitter and modifiers.
- EmitterData emitter = new EmitterData();
- emitter.Modifiers.Add(new SpawnIntervalModifier
- {
- SpawnInterval = 0.05f,
- });
- emitter.Modifiers.Add(new ParticleLifetimeModifier
- {
- ParticleLifetime = 4f
- });
- emitter.Modifiers.Add(new TimeRangeModifier
- {
- TimeRange = new Range(0f, float.PositiveInfinity),
- });
- Graph alphaFade = new Graph();
- alphaFade.Add(0f, 0f);
- alphaFade.Add(0.1f, 1f);
- alphaFade.Add(1f, 0f);
- emitter.Modifiers.Add(new FadeModifier
- {
- AdvancedAlphaFade = alphaFade,
- });
- emitter.Modifiers.Add(new SizeModifier
- {
- HeightRange = new Range(1f, 0f),
- WidthRange = new Range(1f, 0f),
- });
- emitter.Modifiers.Add(new MaterialModifier
- {
- Material = new Material2DColored("GlowLightEffect"),
- });
- emitter.Modifiers.Add(new RandomSpawnOffsetModifier
- {
- MinOffset = new Vector(0f, -0.01f, 0f),
- MaxOffset = new Vector(0f, 0.01f, 0f),
- });
- emitter.Modifiers.Add(new RandomVelocityModifier
- {
- MinVelocity = new Vector(0.05f, 0f, 0f),
- MaxVelocity = new Vector(0.05f, 0f, 0f),
- });
- data.Emitters.Add(emitter);
- Effect.Spawn(data, new Vector(0.5f, 0.5f, 0f));
-
- Application.Start();
- }
- #endregion
-
- #region SparksEffect (Static)
- /// <summary>
- /// Tutorial: Particle Effect Tutorial 4: Sparks Effect
- /// Difficulty: Medium
- /// Description: Draw a simple sparks effect.
- /// Image: http://DeltaEngine.net/Icons/EffectTutorial4.png
- /// </summary>
- [Test, Category("Visual")]
- public static void SparksEffect()
- {
- // Create a new template.
- EffectData data = EffectData.Get("<SparksEffect>");
- // Add an emitter and modifiers.
- EmitterData emitter = new EmitterData();
- emitter.Modifiers.Add(new SpawnIntervalModifier
- {
- SpawnInterval = 0.1f, //1.5f,
- });
- emitter.Modifiers.Add(new ParticleLifetimeModifier
- {
- ParticleLifetime = 1.0f, //0.4f
- });
- emitter.Modifiers.Add(new TimeRangeModifier
- {
- TimeRange = new Range(0f, float.PositiveInfinity),
- });
- emitter.Modifiers.Add(new RotationModifier
- {
- Rotation = new Range(-90f, 90f),
- });
- emitter.Modifiers.Add(new SizeModifier
- {
- HeightRange = new Range(0.25f, 2.0f),
- WidthRange = new Range(0.25f, 2.0f),
- });
- emitter.Modifiers.Add(new FadeModifier
- {
- AlphaFade = new Range(1.0f, 0.0f),
- });
- emitter.Modifiers.Add(new MaterialModifier
- {
- Material = new Material2DColored("BreakoutEffect"),
- });
- emitter.Modifiers.Add(new RandomSpawnOffsetModifier
- {
- MinOffset = new Vector(-0.025f, -0.025f, 0f),
- MaxOffset = new Vector(0.025f, 0.025f, 0f),
- });
- emitter.Modifiers.Add(new RandomVelocityModifier
- {
- MinVelocity = new Vector(-0.15f, -0.15f, 0f),
- MaxVelocity = new Vector(0.15f, 0.15f, 0f),
- });
- data.Emitters.Add(emitter);
- // Always follow the mouse :)
- Effect.Spawn(data, new MouseTracker());
-
- Application.Start();
- }
- #endregion
-
- #region LensFlareEffect (Static)
- /// <summary>
- /// Tutorial: Particle Effect Tutorial 5: Lens-Flare Effect
- /// Difficulty: Medium
- /// Description: Draw a simple lens flare effect.
- /// Image: http://DeltaEngine.net/Icons/EffectTutorial5.png
- /// </summary>
- [Test, Category("Visual")]
- public static void LensFlareEffect()
- {
- // Create a new template.
- EffectData data = EffectData.Get("<LensFlareEffect>");
- // Add an emitter and modifiers.
- EmitterData emitter = new EmitterData();
- emitter.Modifiers.Add(new SpawnOnceModifier());
- emitter.Modifiers.Add(new ParticleLifetimeModifier
- {
- // only show the particle the first tick. The next tick a new one
- // will be spawned.
- ParticleLifetime = 0f,
- });
- emitter.Modifiers.Add(new MaterialModifier
- {
- Material = new Material2DColored("LensflareDTransparency"),
- });
- data.Emitters.Add(emitter);
-
- Application.Start(delegate
- {
- Circle.DrawFilled(Input.Mouse.Position, 0.05f, Color.Yellow);
-
- Vector mousePos = new Vector(Input.Mouse.Position, 0f);
- Vector center = new Vector(0.5f, 0.5f, 0f);
- Vector dir = mousePos - center;
- float distanceHalf = dir.Length * 0.5f;
- dir.Normalize();
-
- Effect.Spawn(data, center + (dir * distanceHalf));
- });
- }
- #endregion
-
- #region BillboardTest (Static)
- /// <summary>
- /// Tutorial: Particle Effect Tutorial 6: Billboard Test
- /// Difficulty: Medium
- /// Description: Test all the billboard modes.
- /// Image: http://DeltaEngine.net/Icons/EffectTutorial6.png
- /// </summary>
- [Test, Category("Visual")]
- public static void BillboardTest()
- {
- // Create a default camera.
- LookAtCamera cam = new LookAtCamera(new Vector(1, -5, 3));
-
- BillboardMode currentMode = BillboardMode.CameraFacing;
-
- // Create the new effect template with the first billboard mode.
- EffectData data = EffectData.Get("<BillboardModeTest>");
- // Add an emitter and modifiers.
- EmitterData emitter = new EmitterData();
- emitter.Modifiers.Add(new AlwaysSpawnModifier());
- emitter.Modifiers.Add(new SizeModifier
- {
- HeightRange = new Range(10),
- WidthRange = new Range(15),
- });
- MaterialModifier materialModifier = new MaterialModifier
- {
- Material = new MaterialColored("DeltaEngineLogo")
- {
- DrawLayer = RenderLayer.Normal,
- BlendColor = Color.White,
- },
- BillboardMode = BillboardMode.CameraFacingPrecise,
- };
- materialModifier.BillboardMode = currentMode;
- emitter.Modifiers.Add(materialModifier);
- data.Emitters.Add(emitter);
-
- int effectId = Effect.Spawn(data, Vector.Zero);
-
- // Start the application.
- Application.Start(delegate
- {
- // Draw a grid for orientation.
- Grid.Draw();
- // Show which mode we're currently using.
- Font.Default.Draw("currentMode=" + currentMode,
- new Rectangle(0.0f, ScreenSpace.DrawArea.Top, 1.0f,
- Font.Default.LineHeight));
-
- // Every time we hit enter or release a touch we want to go to the
- // next billboard mode for easy debugging of all modes.
- if (Input.Keyboard.EnterReleased ||
- Input.Touch.TouchReleased)
- {
- // Go to the next mode
- currentMode = (BillboardMode)currentMode.Next();
- // Skip the only2D mode cause this is working in all the 2d tests
- // anyways.
- if (currentMode == BillboardMode.Only2D)
- {
- currentMode = (BillboardMode)currentMode.Next();
- }
-
- // Kill the previous effect if it exists.
- if (effectId != MathHelper.InvalidIndex)
- {
- Effect.Kill(effectId);
- }
-
- // Set the current mode and then spawn the new effect.
- materialModifier.BillboardMode = currentMode;
- effectId = Effect.Spawn(data, Vector.Zero);
- }
- });
- }
- #endregion
- }
- }