Exemplo n.º 1
0
 public void update(float timeElapsed)
 {
     _delayRemaining -= timeElapsed;
     _position       += _velocity * timeElapsed;
     if (isDone)
     {
         _em.showExplosion(_explParams, _intensity, _position, _velocity);
     }
 }
Exemplo n.º 2
0
            public void update(float timeElapsed)
            {
                _position         += _velocity * timeElapsed;
                _timeElapsedTotal += timeElapsed;
                for (int i = 0; i < _delaysRemaining.Length; ++i)
                {
                    if (_explosionsRemaining > 0 && _delaysRemaining [i] <= 0f)
                    {
                        float intensity = _chainParams.minIntensity
                                          + (float)rand.NextDouble() * (_chainParams.maxIntensity - _chainParams.minIntensity);
                        double r = _chainParams.radiusMin
                                   + rand.NextDouble() * (_chainParams.radiusMax - _chainParams.radiusMin);
                        double  theta        = 2.0 * Math.PI * rand.NextDouble();
                        double  phi          = Math.PI * (rand.NextDouble() - 0.5);
                        double  xy           = r * Math.Cos(theta);
                        Vector3 radialOffset = new Vector3(
                            (float)(xy * Math.Cos(theta)),
                            (float)(xy * Math.Sin(theta)),
                            (float)(r * Math.Sin(phi)));

                        Vector3 pos            = _position + radialOffset;
                        double  spreadVelScale = _chainParams.spreadVelocityMin
                                                 + rand.NextDouble() * (_chainParams.spreadVelocityMax - _chainParams.spreadVelocityMin);
                        Vector3 vel = _velocity;
                        if (radialOffset.LengthFast > 0f)
                        {
                            var radialDir       = radialOffset.Normalized();
                            var radialVelOffset = (float)spreadVelScale * radialDir;
                            pos += radialVelOffset * _timeElapsedTotal;
                            vel += radialVelOffset;
                        }
                        _em.showExplosion(_chainParams, intensity, pos, vel);

                        _delaysRemaining [i] = _chainParams.minDelay
                                               + (float)rand.NextDouble() * (_chainParams.maxDelay - _chainParams.minDelay);

                        --_explosionsRemaining;
                    }
                    _delaysRemaining [i] -= timeElapsed;
                }
            }