public void Update() { bool noModifier = !Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftAlt); bool ctrlExclusive = Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftAlt); bool shiftExclusive = !Input.GetKey(KeyCode.LeftControl) && Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftAlt); bool ctrlShiftExclusive = Input.GetKey(KeyCode.LeftControl) && Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftAlt); int scrollDirection = Math.Sign(Input.mouseScrollDelta.y); if (Input.GetKeyUp(KeyCode.Space)) { songEditorSceneController.TogglePlayPause(); } if (scrollDirection != 0 && noteArea.IsPointerOver) { // Scroll horizontal in NoteArea with mouse wheel if (noModifier) { noteArea.ScrollHorizontal(scrollDirection); } // Zoom horizontal in NoteArea with Ctrl + mouse wheel if (ctrlExclusive) { noteArea.ZoomHorizontal(scrollDirection); } // Scroll vertical in NoteArea with Shift + mouse wheel if (shiftExclusive) { noteArea.ScrollVertical(scrollDirection); } // Zoom vertical in NoteArea with Ctrl + Shift + mouse wheel if (ctrlShiftExclusive) { noteArea.ZoomVertical(scrollDirection); } } }
private void UpdateInputToScrollAndZoom(EKeyboardModifier modifier) { // Scroll with arroy keys if (Input.GetKeyUp(KeyCode.LeftArrow) && modifier == EKeyboardModifier.None && !InputFieldHasFocus()) { noteArea.ScrollHorizontal(-1); } if (Input.GetKeyUp(KeyCode.RightArrow) && modifier == EKeyboardModifier.None && !InputFieldHasFocus()) { noteArea.ScrollHorizontal(1); } // Zoom and scroll with mouse wheel int scrollDirection = Math.Sign(Input.mouseScrollDelta.y); if (scrollDirection != 0 && noteArea.IsPointerOver) { // Scroll horizontal in NoteArea with mouse wheel if (modifier == EKeyboardModifier.None) { noteArea.ScrollHorizontal(scrollDirection); } // Zoom horizontal in NoteArea with Ctrl + mouse wheel if (modifier == EKeyboardModifier.Ctrl) { noteArea.ZoomHorizontal(scrollDirection); } // Scroll vertical in NoteArea with Shift + mouse wheel if (modifier == EKeyboardModifier.Shift) { noteArea.ScrollVertical(scrollDirection); } // Zoom vertical in NoteArea with Ctrl + Shift + mouse wheel if (modifier == EKeyboardModifier.CtrlShift) { noteArea.ZoomVertical(scrollDirection); } } }
private void UpdateInputToScrollAndZoom(EKeyboardModifier modifier) { // Scroll with arroy keys if (Input.GetKeyUp(KeyCode.LeftArrow) && modifier == EKeyboardModifier.None) { noteArea.ScrollHorizontal(-1); } if (Input.GetKeyUp(KeyCode.RightArrow) && modifier == EKeyboardModifier.None) { noteArea.ScrollHorizontal(1); } // Zoom horizontal with Ctrl+'+' and Ctrl+'-' // Note: On my keyboard, the plus button has KeyCode.Equals but I don't know why. bool isPlusKeyUp = Input.GetKeyUp(KeyCode.Plus) || Input.GetKeyUp(KeyCode.KeypadPlus) || Input.GetKeyUp(KeyCode.Equals); bool isMinusKeyUp = Input.GetKeyUp(KeyCode.Minus) || Input.GetKeyUp(KeyCode.KeypadMinus); if (isPlusKeyUp && modifier == EKeyboardModifier.Ctrl) { noteArea.ZoomHorizontal(1); } if (isMinusKeyUp && modifier == EKeyboardModifier.Ctrl) { noteArea.ZoomHorizontal(-1); } // Zoom vertical with Ctrl+Shift+'+' and Ctrl+Shift+'-' if (isPlusKeyUp && modifier == EKeyboardModifier.CtrlShift) { noteArea.ZoomVertical(1); } if (isMinusKeyUp && modifier == EKeyboardModifier.CtrlShift) { noteArea.ZoomVertical(-1); } // Zoom and scroll with mouse wheel int scrollDirection = Math.Sign(Input.mouseScrollDelta.y); if (scrollDirection != 0 && noteArea.IsPointerOver) { // Scroll horizontal in NoteArea with mouse wheel if (modifier == EKeyboardModifier.None) { noteArea.ScrollHorizontal(scrollDirection); } // Zoom horizontal in NoteArea with Ctrl + mouse wheel if (modifier == EKeyboardModifier.Ctrl) { noteArea.ZoomHorizontal(scrollDirection); } // Scroll vertical in NoteArea with Shift + mouse wheel if (modifier == EKeyboardModifier.Shift) { noteArea.ScrollVertical(scrollDirection); } // Zoom vertical in NoteArea with Ctrl + Shift + mouse wheel if (modifier == EKeyboardModifier.CtrlShift) { noteArea.ZoomVertical(scrollDirection); } } }
private void Start() { InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Zoom Horizontal", "Ctrl+Mouse Wheel | 2 Finger Pinch-gesture")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Zoom Vertical", "Ctrl+Shift+Mouse Wheel | 2 Finger Pinch-gesture")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Scroll Horizontal", "Mouse Wheel | Arrow Keys | 2 Finger Drag | Middle Mouse Button+Drag")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Scroll Vertical", "Shift+Mouse Wheel | Shift+Arrow Keys | 2 Finger Drag | Middle Mouse Button+Drag")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Move Note Horizontal", "Shift+Arrow Keys | 1 (Numpad) | 3 (Numpad)")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Move Note Vertical", "Shift+Arrow Keys | Minus (Numpad) | Plus (Numpad)")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Move Note Vertical One Octave", "Ctrl+Shift+Arrow Keys")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Move Left Side of Note", "Ctrl+Arrow Keys | Divide (Numpad) | Multiply (Numpad)")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Move Right side of Note", "Alt+Arrow Keys | 7 (Numpad) | 8 (Numpad) | 9 (Numpad)")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Select Next Note", "6 (Numpad)")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Select Previous Note", "4 (Numpad)")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Play Selected Notes", "5 (Numpad)")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Toggle Play Pause", "Double Click")); InputManager.AdditionalInputActionInfos.Add(new InputActionInfo("Play MIDI Sound of Note", "Ctrl+Click Note")); // Show / hide help InputManager.GetInputAction(R.InputActions.usplay_toggleHelp).PerformedAsObservable() .Subscribe(_ => inputActionInfoOverlay.SetActive(!inputActionInfoOverlay.activeSelf)); // Jump to start / end of song InputManager.GetInputAction(R.InputActions.songEditor_jumpToStartOfSong).PerformedAsObservable() .Subscribe(_ => songAudioPlayer.PositionInSongInMillis = 0); InputManager.GetInputAction(R.InputActions.songEditor_jumpToEndOfSong).PerformedAsObservable() .Subscribe(_ => songAudioPlayer.PositionInSongInMillis = songAudioPlayer.DurationOfSongInMillis - 1); // Play / pause InputManager.GetInputAction(R.InputActions.songEditor_togglePlayPause).PerformedAsObservable() .Where(_ => !InputUtils.IsKeyboardControlPressed()) .Subscribe(_ => songEditorSceneController.ToggleAudioPlayPause()); // Play only the selected notes InputManager.GetInputAction(R.InputActions.songEditor_playSelectedNotes).PerformedAsObservable() .Subscribe(_ => PlayAudioInRangeOfNotes(selectionController.GetSelectedNotes())); // Stop playback or return to last scene InputManager.GetInputAction(R.InputActions.usplay_back).PerformedAsObservable() .Subscribe(OnBack); // Select all notes InputManager.GetInputAction(R.InputActions.songEditor_selectAll).PerformedAsObservable() .Subscribe(_ => selectionController.SelectAll()); // Select next / previous note InputManager.GetInputAction(R.InputActions.songEditor_selectNextNote).PerformedAsObservable() .Where(_ => !InputUtils.AnyKeyboardModifierPressed()) .Subscribe(_ => selectionController.SelectNextNote()); InputManager.GetInputAction(R.InputActions.songEditor_selectPreviousNote).PerformedAsObservable() .Subscribe(_ => selectionController.SelectPreviousNote()); // Delete notes InputManager.GetInputAction(R.InputActions.songEditor_delete).PerformedAsObservable() .Subscribe(_ => deleteNotesAction.ExecuteAndNotify(selectionController.GetSelectedNotes())); // Undo InputManager.GetInputAction(R.InputActions.songEditor_undo).PerformedAsObservable() .Subscribe(_ => historyManager.Undo()); // Redo InputManager.GetInputAction(R.InputActions.songEditor_redo).PerformedAsObservable() .Subscribe(_ => historyManager.Redo()); // Save InputManager.GetInputAction(R.InputActions.songEditor_save).PerformedAsObservable() .Subscribe(_ => songEditorSceneController.SaveSong()); // Start editing of lyrics InputManager.GetInputAction(R.InputActions.songEditor_editLyrics).PerformedAsObservable() .Subscribe(_ => songEditorSceneController.StartEditingNoteText()); // Change position in song InputManager.GetInputAction(R.InputActions.ui_navigate).PerformedAsObservable() .Subscribe(OnNavigate); // Make golden / freestyle / normal InputManager.GetInputAction(R.InputActions.songEditor_toggleNoteTypeGolden).PerformedAsObservable() .Where(_ => !InputUtils.AnyKeyboardModifierPressed()) .Subscribe(_ => toggleNoteTypeAction.ExecuteAndNotify(selectionController.GetSelectedNotes(), ENoteType.Golden)); InputManager.GetInputAction(R.InputActions.songEditor_toggleNoteTypeFreestyle).PerformedAsObservable() .Where(_ => !InputUtils.AnyKeyboardModifierPressed()) .Subscribe(_ => toggleNoteTypeAction.ExecuteAndNotify(selectionController.GetSelectedNotes(), ENoteType.Freestyle)); InputManager.GetInputAction(R.InputActions.songEditor_toggleNoteTypeNormal).PerformedAsObservable() .Where(_ => !InputUtils.AnyKeyboardModifierPressed()) .Subscribe(_ => toggleNoteTypeAction.ExecuteAndNotify(selectionController.GetSelectedNotes(), ENoteType.Normal)); InputManager.GetInputAction(R.InputActions.songEditor_toggleNoteTypeRap).PerformedAsObservable() .Where(_ => !InputUtils.AnyKeyboardModifierPressed()) .Subscribe(_ => toggleNoteTypeAction.ExecuteAndNotify(selectionController.GetSelectedNotes(), ENoteType.Rap)); InputManager.GetInputAction(R.InputActions.songEditor_toggleNoteTypeRapGolden).PerformedAsObservable() .Where(_ => !InputUtils.AnyKeyboardModifierPressed()) .Subscribe(_ => toggleNoteTypeAction.ExecuteAndNotify(selectionController.GetSelectedNotes(), ENoteType.RapGolden)); // Zoom and scroll with mouse wheel InputManager.GetInputAction(R.InputActions.ui_scrollWheel).PerformedAsObservable() .Subscribe(OnScrollWheel); // Zoom horizontal with shortcuts InputManager.GetInputAction(R.InputActions.songEditor_zoomInHorizontal).PerformedAsObservable() .Where(_ => !InputUtils.IsKeyboardShiftPressed()) .Subscribe(context => { noteArea.ZoomHorizontal(1); }); InputManager.GetInputAction(R.InputActions.songEditor_zoomOutHorizontal).PerformedAsObservable() .Where(_ => !InputUtils.IsKeyboardShiftPressed()) .Subscribe(context => { noteArea.ZoomHorizontal(-1); }); // Zoom vertical with shortcuts InputManager.GetInputAction(R.InputActions.songEditor_zoomInVertical).PerformedAsObservable() .Where(_ => InputManager.GetInputAction(R.InputActions.songEditor_zoomOutVertical).ReadValue <float>() == 0) .Subscribe(context => { noteArea.ZoomVertical(1); }); InputManager.GetInputAction(R.InputActions.songEditor_zoomOutVertical).PerformedAsObservable() .Subscribe(context => noteArea.ZoomVertical(-1)); }