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); } }
private void HandleKeyboardInput(InputState input) { if (input.IsNewKeyPress(Keys.S)) { SaveTrack(); } else if (input.IsNewKeyPress(Keys.L)) { var openDialog = new CommonOpenFileDialog("Load Track"); openDialog.Title = "Load Track"; openDialog.InitialDirectory = TrackDir; openDialog.Filters.Add(new CommonFileDialogFilter("Track XML Files", "xml")); var result = openDialog.ShowDialog(); if (!result.Canceled && openDialog.FileNames.Count > 0) { LoadTrack(openDialog.FileNames.First()); } } }