public void Step(World worldState, float elapsedSeconds)
{
if (GameSession.Renderer.WaterRenderer.NOWATER)
return;
if (++seldomCtr < 2)
return;
//Collision(elapsedSeconds);
Viscosity(elapsedSeconds);
Avoidance(elapsedSeconds);
for (var i = 0; i < ParticleCount; ++i)
{
Velocities[i].Y += -9.81f*elapsedSeconds;
}
WorldCollision(elapsedSeconds);
for (var i = 0; i < ParticleCount; ++i)
{
Particles[i] = Particles[i] + Velocities[i]*elapsedSeconds;
var x = Math.Max(0, Math.Min(Particles[i].X,_width-1));
var y = Math.Max(0, Math.Min(Particles[i].Y,_height-1));
if (x != Particles[i].X)
Velocities[i].X = -Velocities[i].X*0.5f;
if (y != Particles[i].Y)
Velocities[i].Y = -Velocities[i].Y*0.5f;
Particles[i].X = x;
Particles[i].Y = y;
}
for (var x = 0; x < _width*GridMultiplier; ++x)
for (var y = 0; y < _height * GridMultiplier; ++y)
_grid[x,y].Clear();
for (var i = 0; i < ParticleCount; ++i)
_grid[(int)(Particles[i].X * GridMultiplier), (int)(Particles[i].Y * GridMultiplier)].Add(i);
}