/// <summary> /// Constructs a new particle emitter object. /// </summary> public ParticleEmitter(ParticleSystem particleSystem, float particlesPerSecond, Vector3 initialPosition) { this.particleSystem = particleSystem; timeBetweenParticles = 1.0f / particlesPerSecond; previousPosition = initialPosition; }
public void Draw(SpriteBatch sb, ParticleSystem ps) { foreach (var p in ps.Particles) { if (p != null) { var c = Color; c.A = (byte)MathHelper.Lerp(255, 0, (p.Age / (float)p.MaxAge)); var p0 = p.Position.ToVector2() * scale + Position; sb.Draw(texture, p0, null, c, 0, origin, 1f, SpriteEffects.None, 0f); } } foreach (var a in ps.Attractors) { var pos = a.Position.ToVector2() * scale + Position; sb.Draw(texture, pos, null, Color, 0, origin, 1f, SpriteEffects.None, 0f); } }
/// <summary> /// Constructs a new projectile. /// </summary> public Projectile(ParticleSystem explosionParticles, ParticleSystem explosionSmokeParticles, ParticleSystem projectileTrailParticles) { this.explosionParticles = explosionParticles; this.explosionSmokeParticles = explosionSmokeParticles; // Start at the origin, firing in a random (but roughly upward) direction. position = Vector3.Zero; velocity.X = (float)(random.NextDouble() - 0.5) * sidewaysVelocityRange; velocity.Y = (float)(random.NextDouble() + 0.5) * verticalVelocityRange; velocity.Z = (float)(random.NextDouble() - 0.5) * sidewaysVelocityRange; // Use the particle emitter helper to output our trail particles. trailEmitter = new ParticleEmitter(projectileTrailParticles, trailParticlesPerSecond, position); }
public ParticleSystemVisualizer(ParticleSystem ps, Vector2 position, float scale) { particleSystem = ps; Position = position; this.scale = scale; }
/// <summary> /// removes the passed in ParticleSystem from the internal list once /// it is stopped and has no active particles, this will destroy the /// particle system and its particles if no other references to it exists /// </summary> /// <param name="ps">ParticleSystem to destroy</param> public static void DestroyIdlePS(ParticleSystem ps) { if (!ps.isPlaying && ps.particleCount == 0) DestroyActivePS(ps); else if (!destroySystems.Contains(ps)) destroySystems.Add(ps); }
/// <summary> /// removes the passed in ParticleSystem from the internal list, this will destroy /// the particle system and its particles if no other references to it exists /// </summary> /// <param name="ps">ParticleSystem to destroy</param> public static void DestroyActivePS(ParticleSystem ps) { if (ps != null && particleSystems.Contains(ps)) particleSystems.Remove(ps); }
/// <summary> /// creates a new ParticleSystem using the passed in Texture2D and returns it /// (use the returned ParticleSystem to change the particle system settings) /// </summary> /// <param name="texture">texture that each of this ParticleSystem's particles will use</param> /// <returns>ParticleSystem</returns> public static ParticleSystem CreateParticleSystem(Texture2D texture) { if (spriteBatch == null) throw new Exception("must initialise 'Particles' with a non-null SpriteBatch object before use"); if (texture == null) throw new Exception("cannot pass null for parameter 'texture' when calling 'ParticleSystem.CreateParticleSystem'"); ParticleSystem ps = new ParticleSystem(texture, spriteBatch, rng); particleSystems.Add(ps); return ps; }
public Model3D CreateParticleSystem(int maxCount, System.Windows.Media.Color color) { ParticleSystem ps = new ParticleSystem(maxCount, color); this.particleSystems.Add(color, ps); return ps.ParticleModel; }