public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { Vector3 deltaColorFirst = _medianColor - _initialColor; Vector3 deltaColorLast = _finalColor - _medianColor; Particle particle = iterator.First; do { if (particle.Age < _median) { float ageMultiplier = particle.Age / _median; particle.Color.X = _initialColor.X + deltaColorFirst.X * ageMultiplier; particle.Color.Y = _initialColor.Y + deltaColorFirst.Y * ageMultiplier; particle.Color.Z = _initialColor.Z + deltaColorFirst.Z * ageMultiplier; } else { float ageMultiplier = (particle.Age - _median) / (1f - _median); particle.Color.X = _medianColor.X + deltaColorLast.X * particle.Age; particle.Color.Y = _medianColor.Y + deltaColorLast.Y * particle.Age; particle.Color.Z = _medianColor.Z + deltaColorLast.Z * particle.Age; } } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { Particle particle = iterator.First; do { particle.Rotation = FlaiMath.GetAngle(particle.Velocity); } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { Particle particle = iterator.First; if (_noiseSpeedMultiplier == 1) { do { particle.Opacity = _initialOpacity - _initialOpacity * particle.Age; } while (iterator.MoveNext(ref particle)); } else { float multiplier = _initialOpacity * _noiseSpeedMultiplier + _initialOpacity; do { particle.Opacity = _initialOpacity - _initialOpacity * (1 + (multiplier - 1) * particle.Noise) * particle.Age; // with this opacity can go below zero } while (iterator.MoveNext(ref particle)); } }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { float scaleDelta = _finalScale - _initialScale; Particle particle = iterator.First; do { particle.Scale = _initialScale + scaleDelta * particle.Age; } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { float opacityDelta = _finalOpacity - _initialOpacity; Particle particle = iterator.First; do { particle.Opacity = _initialOpacity + opacityDelta * particle.Age; } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { float hueChange = this.HueShiftAmount * updateContext.DeltaSeconds * FlaiMath.Pi / 180f; Matrix hueShiftMatrix = HueShifter.CreateHueTransformationMatrix(hueChange); Particle particle = iterator.First; do { HueShifter.Shift(ref particle.Color, ref hueShiftMatrix); } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { Vector3 deltaColor = _finalColor - _initialColor; Particle particle = iterator.First; do { particle.Color.X = _initialColor.X + deltaColor.X * particle.Age; particle.Color.Y = _initialColor.Y + deltaColor.Y * particle.Age; particle.Color.Z = _initialColor.Z + deltaColor.Z * particle.Age; } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { const float Multiplier = 200; float tempAttractionPower = this.AttractionPower * updateContext.DeltaSeconds * Multiplier; Particle particle = iterator.First; do { float distance = Vector2.Distance(this.AttractionPoint, particle.Position); particle.Velocity += (this.AttractionPoint - particle.Position) * tempAttractionPower / distance; } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { if (this.RotationRate <= float.Epsilon) { return; } float deltaRotation = this.RotationRate * updateContext.DeltaSeconds; Particle particle = iterator.First; do { particle.Rotation += deltaRotation; } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { float deltaStrength = this.Strength * updateContext.DeltaSeconds; if (deltaStrength == 0f || _direction == Vector2.Zero) { return; } Vector2 deltaGravity = _direction * deltaStrength; Particle particle = iterator.First; do { particle.Velocity += deltaGravity; } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { if (this.DampingPower <= float.Epsilon) { return; } float inverseDampingDelta = -this.DampingPower * updateContext.DeltaSeconds; Particle particle = iterator.First; do { particle.Velocity.X += particle.Velocity.X * inverseDampingDelta; // inverse velocity particle.Velocity.Y += particle.Velocity.Y * inverseDampingDelta; // inverse velocity } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { Particle particle = iterator.First; float maxSpeedSquared = _maximumSpeed * _maximumSpeed; do { float speedSquared = particle.Velocity.X * particle.Velocity.X + particle.Velocity.Y * particle.Velocity.Y; if (speedSquared > maxSpeedSquared) { particle.Velocity.Normalize(); particle.Velocity *= _maximumSpeed; } } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { float opacityDeltaFirst = _medianOpacity - _initialOpacity; float opacityDeltaLast = _finalOpacity - _medianOpacity; Particle particle = iterator.First; do { if (particle.Age < _median) { particle.Opacity = _initialOpacity + opacityDeltaFirst * (particle.Age / _median); } else { particle.Opacity = _medianOpacity + opacityDeltaLast * (particle.Age - _median) / (1f - _median); } } while (iterator.MoveNext(ref particle)); }
public override void Process(UpdateContext updateContext, ref ParticleBuffer.Iterator iterator) { float scaleDeltaFirst = _medianScale - _initialScale; float scaleDeltaLast = _finalScale - _medianScale; Particle particle = iterator.First; do { if (particle.Age < _median) { particle.Scale = _initialScale + scaleDeltaFirst * (particle.Age / _median); } else { particle.Scale = _medianScale + scaleDeltaLast * (particle.Age - _median) / (1f - _median); } } while (iterator.MoveNext(ref particle)); }
protected override void Render(GraphicsContext graphicsContext, ref ParticleBuffer.Iterator iterator, TextureDefinition texture, ParticleBlendMode blendMode) { if (!this.IsSpriteBatchAlreadyRunning) { graphicsContext.SpriteBatch.Begin(SpriteSortMode.Deferred, blendMode.ToBlendState(), SamplerState.PointClamp, null, null, null); } float inverseTextureWidth = 1f / texture.Width; Vector2 origin = new Vector2(texture.Width, texture.Height) / 2f; Particle particle = iterator.First; do { float scale = particle.Scale * inverseTextureWidth; // Color * alpha is slow.... graphicsContext.SpriteBatch.Draw(texture, particle.Position, new Color(particle.Color) * particle.Opacity, particle.Rotation, origin, particle.Scale); } while (iterator.MoveNext(ref particle)); if (!this.IsSpriteBatchAlreadyRunning) { graphicsContext.SpriteBatch.End(); } }