private void ApplyMouseVelocityToVectorGrid() { if (Input.LeftMousePressed) { LastMousePosition = Input.Mouse; } else if (Input.LeftMouseDown) { var diff = Input.Mouse - LastMousePosition; if (diff.LengthSquared >= 1) { var diffNormal = (diff).Normalized(); const int MouseDistanceSq = 100 * 100; for (var x = 0; x < grid.Width; x++) { for (var y = 0; y < grid.Height; y++) { if ((Input.Mouse - grid.GridPositionToWorldPosition(new Vector2(x, y))).LengthSquared <= MouseDistanceSq) { var tile = grid.Get(x, y); if (tile != null) { tile.Vector = diffNormal; } } } } } LastMousePosition = Input.Mouse; } }
public void ApplyVectorGridSynchronously(VectorGrid _vectorGrid) { foreach (var particle in particles) { var tile = _vectorGrid.Get(_vectorGrid.WorldPositionToGridPosition(particle.Position)); if (tile != null) { particle.ApplyForce(0.001f * tile.Vector * Game.Delta); } } }