public void AddTransform(Matrix transform, float rotation, Color tint, Color color, bool rebuild) { LocalTransforms.Add(transform * Matrix.Invert(GlobalTransform)); Rotations.Add(rotation); Tints.Add(tint); Colors.Add(color); if (rebuild) { RebuildPrimitive(); } }
private void CreateBurst() { if (ParticleRegistrationCallback != null) { // Check if we have not set up any tints/fadepoints/emission offsets and put in some defaults if we have not if (Tints.Count < 1) { Tints.Add(Color.White); } if (_sortedFadePoints.Count < 1) { if (_fadePoints != null) { _sortedFadePoints = _fadePoints.OrderBy(fp => fp.X).ToList(); } else { _sortedFadePoints.Add(new Vector2(0.0f, 1.0f)); _sortedFadePoints.Add(new Vector2(1.0f, 0.0f)); } } if (EmissionPointOffsets.Count < 1) { EmissionPointOffsets.Add(Vector2.Zero); } for (int i = 0; i < _particlesPerBurst; i++) { Particle newParticle = new Particle(); newParticle.Duration = _lifespanRange.RandomValue; newParticle.WorldPosition = WorldPosition + EmissionPointOffsets[(int)Random.Generator.Next(EmissionPointOffsets.Count)]; newParticle.CameraPosition = CameraPosition; newParticle.Texture = ParticleTexture; newParticle.Frame = ParticleTexture.Bounds; newParticle.Origin = new Vector2(ParticleTexture.Width, ParticleTexture.Height) / 2.0f; newParticle.RenderDepth = RenderDepth; newParticle.Tint = Tints[(int)Random.Generator.Next(Tints.Count)] * _sortedFadePoints[0].Y; newParticle.FadePoints = _sortedFadePoints; newParticle.Visible = true; newParticle.Direction = Direction + Random.Generator.Next(-Spread, Spread); newParticle.Gravity = _gravity; newParticle.GravityAccelerator = _gravityAccelerator; newParticle.Speed = _speedLaunchRange.RandomValue; newParticle.SpeedDelta = _speedDeltaRange.RandomValue; newParticle.SpeedAccelerator = _speedAcceleratorRange.RandomValue; newParticle.Rotation = _rotationLaunchRange.RandomValue; newParticle.RotationDelta = _rotationDeltaRange.RandomValue; newParticle.RotationAccelerator = _rotationAcceleratorRange.RandomValue; newParticle.Scale = _scaleLaunchRange.RandomValue; newParticle.ScaleDelta = _scaleDeltaRange.RandomValue; newParticle.ScaleAccelerator = _scaleDeltaRange.RandomValue; ParticleRegistrationCallback(newParticle); } _burstCount = Math.Max(-1, _burstCount - 1); if ((_burstCount != 0) && (_timerRegistered)) { _burstTimer.NextActionDuration = _burstIntervalInMilliseconds; } } }