public void FreezeParticle(Particle particle) { particle.IsFrozen = true; //frozenParticlesTMP.Add(particle); activeParticles.Remove(particle); frozenParticles.Add(particle); }
public override void Fire() { List<Particle> particles = new List<Particle>(); float Radius = 5; int count = 100; int maxParticleCount = 500; int activeParticles = ActiveParticleCount(); if (count + activeParticles > maxParticleCount) count = maxParticleCount - activeParticles; for (int i = 0; i < count; i++) { Particle particle = new Particle(this); particle.TTL = Runtime.GetRandom().Next(100,500); float rads = (float)(Runtime.GetRandom().NextDouble() * MathHelper.TwoPi); Vector2 offset = new Vector2((float)Math.Cos(rads) * Radius, (float)Math.Sin(rads) * Radius); Vector2 emitPosition = Vector2.Add(Position, offset); particle.X = emitPosition.X; particle.Y = emitPosition.Y; Vector2 vel = new Vector2(Runtime.GetRandom().Next(-50,50), Runtime.GetRandom().Next(-50,50)); vel.Normalize(); particle.Velocity = vel * Runtime.GetRandom().Next(85,185); particles.Add(particle); } this.activeParticles.AddRange(particles); }