Ballz.GameSession.World.Water.Viscosity C# (CSharp) Метод

Viscosity() приватный Метод

private Viscosity ( float elapsedSeconds ) : void
elapsedSeconds float
Результат void
        private void Viscosity(float elapsedSeconds)
        {
            const float µ = 5f;
            const float l = 0.5f;
            const int cellRadius = (int)(GridMultiplier * l);
            Parallel.For(0, ParticleCount, i =>
            {
                var ix = (int) (Particles[i].X*GridMultiplier);
                var iy = (int) (Particles[i].Y*GridMultiplier);

                var neighbors = new List<int>();
                for (var dx = Math.Max(-cellRadius, -ix);
                    dx < Math.Min(cellRadius, _width*GridMultiplier - ix - 1);
                    ++dx)
                    for (var dy = Math.Max(-cellRadius, -iy);
                        dy < Math.Min(cellRadius, _height*GridMultiplier - iy - 1);
                        ++dy)
                        neighbors.AddRange(_grid[ix + dx, iy + dy]);

                if (!neighbors.Any())
                    return;

                var avg = neighbors.Select(ii => Velocities[ii]).Aggregate((ll, r) => ll + r);
                avg /= neighbors.Count;
                _velocityBuffer[i] = Velocities[i] + elapsedSeconds*µ*(avg - Velocities[i]);
            });

            var tmp = _velocityBuffer;
            _velocityBuffer = Velocities;
            Velocities = tmp;
        }