Ejemplo n.º 1
0
        private void UpdateParticles(GameTime gameTime)
        {
            float now = (float)gameTime.TotalGameTime.TotalMilliseconds;

            for (int i = _particleList.Count - 1; i >= 0; i--)
            {
                ParticleData particle  = _particleList[i];
                float        timeAlive = now - particle.BirthTime;

                if (timeAlive > particle.MaxAge)
                {
                    _particleList.RemoveAt(i);
                }
                else
                {
                    //update current particle
                    float relAge = timeAlive / particle.MaxAge;
                    particle.Position = 0.5f * particle.Acceleration * relAge * relAge + particle.Direction * relAge + particle.OriginalPosition;

                    float invAge = 1.0f - relAge;
                    particle.ModColor = new Color(new Vector4(invAge, invAge, invAge, invAge));

                    Vector2 positionFromCenter = particle.Position - particle.OriginalPosition;
                    float   distance           = positionFromCenter.Length();
                    particle.Scaling = (50.0f + distance) / 200.0f;

                    _particleList[i] = particle;
                }
            }
        }
Ejemplo n.º 2
0
 private void DrawExplosion()
 {
     for (int i = 0; i < _particleList.Count; i++)
     {
         ParticleData particle = _particleList[i];
         _spriteBatch.Draw(_explosionTexture, particle.Position, null, particle.ModColor, i, new Vector2(256, 256), particle.Scaling, SpriteEffects.None, 1);
     }
 }
Ejemplo n.º 3
0
        private void AddExplosionParticle(Vector2 explosionPos, float explosionSize, float maxAge, GameTime gameTime)
        {
            ParticleData particle = new ParticleData();

            particle.OriginalPosition = explosionPos;
            particle.Position         = particle.OriginalPosition;

            particle.BirthTime = (float)gameTime.TotalGameTime.TotalMilliseconds;
            particle.MaxAge    = maxAge;
            particle.Scaling   = 0.25f;
            particle.ModColor  = Color.White;

            float   particleDistance = (float)_randomizer.NextDouble() * explosionSize;
            Vector2 displacement     = new Vector2(particleDistance, 0);
            float   angle            = MathHelper.ToRadians(_randomizer.Next(360));

            displacement = Vector2.Transform(displacement, Matrix.CreateRotationZ(angle));

            particle.Direction    = displacement * 2.0f;
            particle.Acceleration = -particle.Direction;

            _particleList.Add(particle);
        }