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

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

private WorldCollision ( float elapsedSeconds ) : void
elapsedSeconds float
Результат void
        private void WorldCollision(float elapsedSeconds)
        {
            for (var i = 0; i < ParticleCount; ++i)
            {
                var newPos = Particles[i] + Velocities[i]*elapsedSeconds;
                if (!_physics.IsEmpty(newPos))
                {
                    var res = _physics.Raycast(Particles[i], newPos);
                    if (!res.HasHit)
                    {
                        Velocities[i] = new Vector2((float) _rng.NextDouble()*2 - 1, (float) _rng.NextDouble()*2 - 1);
                        var newPos2 = Particles[i] + Velocities[i] * elapsedSeconds;
                        var res2 = _physics.Raycast(Particles[i], newPos2);
                        if (!_physics.IsEmpty(newPos2) || res2.HasHit)
                        {
                            Velocities[i] = Vector2.Zero;
                        }
                        continue;
                    }

                    res.Entity?.PhysicsBody.ApplyForce(Velocities[i]*200f);
                    Velocities[i] = (Velocities[i] - (Vector2.Dot(Velocities[i], res.Normal)) * res.Normal * 2) * 0.5f;
                }
            }
        }