private void RemoveObstacle(PolygonObstacle obstacle) { if (obstacle == null) return; _world.RemoveBody(obstacle.Body); _obstacles.Remove(obstacle); }
private void AddMenuObstacles() { Vector2 pos = _menuPosition + new Vector2(20, 20); for (int width = 1; width <= 2; width++) { foreach (int rotate in new int[] { 0, 90, 180, 270 }) { foreach (bool flip in new bool[] { false, true }) { var obstacle = new PolygonObstacle(pos, width, rotate, flip, _world, false); _menuObstacles.Add( obstacle ); pos = pos + new Vector2(obstacle.Width + 10, 0); } } } pos = _menuPosition + new Vector2(20, 150); for (int red = 0; red <= 255; red += 127) { for (int green = 0; green <= 255; green += 127) { for (int blue = 0; blue <= 255; blue += 127) { _colorObstacles.Add(new PolygonObstacle(pos, 1, 0, false, _world, new Color(red, green, blue), false)); pos = pos + new Vector2(40, 0); } } } }
private void HandleMouseInput(InputState input) { // Press left button down: start drag if (input.LastMouseState.LeftButton == ButtonState.Released && input.CurrentMouseState.LeftButton == ButtonState.Pressed) { if (input.LastKeyboardState.IsKeyDown(Keys.LeftShift) && _selectedMenuObstacle != null && _selectedColorObstacle != null) { _obstacles.Add(_selectedMenuObstacle.Clone(CoarsePosition(MouseWorldPos), _selectedColorObstacle.Color, _world)); } else { if (ObstacleAt(MouseWorldPos, _obstacles) != null) { _draggedObstacle = ObstacleAt(MouseWorldPos, _obstacles); } else if (ObstacleAt(MouseScreenPos, _menuObstacles) != null) { _selectedMenuObstacle = ObstacleAt(MouseScreenPos, _menuObstacles); } else if (ObstacleAt(MouseScreenPos, _colorObstacles) != null) { _selectedColorObstacle = ObstacleAt(MouseScreenPos, _colorObstacles); } } } // Lift left button up: end drag else if (_input.LastMouseState.LeftButton == ButtonState.Pressed && _input.CurrentMouseState.LeftButton == ButtonState.Released) { _draggedObstacle = null; } else if (_input.LastMouseState.RightButton == ButtonState.Released && _input.CurrentMouseState.RightButton == ButtonState.Pressed) { RemoveObstacle(ObstacleAt(MouseWorldPos, _obstacles)); } // Move picked obstacle if (_draggedObstacle != null) { _draggedObstacle.Position = CoarsePosition(MouseWorldPos); } }