Ejemplo n.º 1
0
        public void ApplyAffector(Particle currentParticle, TimeSpan elapsedTime, TimeSpan totalTime)
        {
            if (currentParticle.Color.A == 254)
            {
                if (MathHelper.DistanceBetweenTwoPints(currentParticle.Position, _origin) <= _radius)
                {
                    currentParticle.Velocity = new Vector2f(0, 0);
                    currentParticle.Color = new Color(0, 0, 0, 0);
                }
            }
            else if (MathHelper.DistanceBetweenTwoPints(currentParticle.Position, _explosionOrigin) >= _maxDistance)
            {
                currentParticle.Color = new Color(
                    currentParticle.Color.R,
                    currentParticle.Color.G,
                    currentParticle.Color.B,
                    254);
                currentParticle.Velocity = 350
                                           * MathHelper.NormalizeVector(
                                               new Vector2f(
                                                 _origin.X - currentParticle.Position.X,
                                                 _origin.Y - currentParticle.Position.Y));
            }
            else if (currentParticle.Color.A != 0)
            {
                var speed = (float)Math.Log(totalTime.TotalSeconds, 5.5f);
                if (float.IsInfinity(speed) || float.IsNaN(speed))
                {
                    return;
                }

                currentParticle.Velocity += MathHelper.NormalizeVector(currentParticle.Velocity) * speed;
            }
        }
Ejemplo n.º 2
0
        public override void EmitParticles(ParticleSystem particleSystem, TimeSpan deltaTime)
        {
            for (var i = 0;
                 i
                 < (deltaTime == TimeSpan.Zero
                        ? int.MaxValue
                        : deltaTime.TotalMilliseconds / _interval.TotalMilliseconds) && _particleCount > 0;
                 i++, _particleCount--)
            {
                var velocity = new PolarVector(
                    _rndgenerator.Next(7000, 9000) / 100f,
                    _rndgenerator.Next((int)(_angle - 85f), (int)(_angle + 85f)));

                var particle = new Particle(TimeSpan.Zero) { Position = _position, Velocity = velocity, Color = _color };
                EmitParticle(particleSystem, particle);
            }
        }
Ejemplo n.º 3
0
 protected void EmitParticle(ParticleSystem particleSystem, Particle particle)
 {
     particleSystem.AddParticle(particle);
 }