void HighlightCurrentSection(SongObjectSelectedManipFn manipFn, Globals.ViewMode viewMode, int sectionOffset = 0) { // Get the previous and next section uint currentPos = editor.currentTickPos; var sections = editor.currentSong.sections; int maxSectionIndex = 0; while (maxSectionIndex < sections.Count && !(sections[maxSectionIndex].tick > currentPos)) { ++maxSectionIndex; } maxSectionIndex += sectionOffset; uint rangeMin = (maxSectionIndex - 1) >= 0 ? sections[maxSectionIndex - 1].tick : 0; uint rangeMax = maxSectionIndex < sections.Count ? sections[maxSectionIndex].tick : uint.MaxValue; if (rangeMax > 0) { --rangeMax; } if (viewMode == Globals.ViewMode.Chart) { manipFn(SongObjectHelper.GetRangeCopy(editor.currentChart.chartObjects.ToArray(), rangeMin, rangeMax)); } else { manipFn(SongObjectHelper.GetRangeCopy(editor.currentSong.syncTrack.ToArray(), rangeMin, rangeMax)); manipFn(SongObjectHelper.GetRangeCopy(editor.currentSong.eventsAndSections.ToArray(), rangeMin, rangeMax)); } }
public override void OnSelectableMouseDown() { if (Toolpane.currentTool == Toolpane.Tools.Cursor && Globals.applicationMode == Globals.ApplicationMode.Editor && Input.GetMouseButtonDown(0) && !Input.GetMouseButton(1)) { // Ctrl-clicking if (Globals.modifierInputActive) { if (editor.IsSelected(songObject)) { editor.RemoveFromSelectedObjects(songObject); } else { editor.AddToSelectedObjects(songObject); } } // Shift-clicking else if (Globals.secondaryInputActive) { int pos = SongObjectHelper.FindClosestPosition(this.songObject, editor.currentSelectedObjects); if (pos != SongObjectHelper.NOTFOUND) { uint min; uint max; if (editor.currentSelectedObjects[pos].tick > songObject.tick) { max = editor.currentSelectedObjects[pos].tick; min = songObject.tick; } else { min = editor.currentSelectedObjects[pos].tick; max = songObject.tick; } editor.currentSelectedObjects = SongObjectHelper.GetRangeCopy(editor.currentChart.chartObjects, min, max); } } // Regular clicking else if (!editor.IsSelected(songObject)) { if (ShortcutInput.GetInput(Shortcut.ChordSelect)) { editor.currentSelectedObjects = note.GetChord(); } else { editor.currentSelectedObject = songObject; } } } // Delete the object on erase tool else if (Globals.applicationMode == Globals.ApplicationMode.Editor && ( (Toolpane.currentTool == Toolpane.Tools.Eraser && Input.GetMouseButtonDown(0)) || (Input.GetMouseButtonDown(0) && Input.GetMouseButton(1)) || Eraser.dragging) ) { if (ShortcutInput.GetInput(Shortcut.ChordSelect)) { Note[] chordNotes = note.GetChord(); if (!Input.GetMouseButton(1)) { Debug.Log("Deleted " + note + " chord at position " + note.tick + " with eraser tool"); Eraser.dragEraseHistory.Add(new ActionHistory.Delete(chordNotes)); } else { Debug.Log("Deleted " + note + " chord at position " + note.tick + " with hold-right left-click shortcut"); editor.actionHistory.Insert(new ActionHistory.Delete(chordNotes)); } //editor.actionHistory.Insert(new ActionHistory.Delete(chordNotes)); foreach (Note chordNote in chordNotes) { chordNote.Delete(); } } else { if (!Input.GetMouseButton(1)) { Debug.Log("Deleted " + note + " at position " + note.tick + " with eraser tool"); Eraser.dragEraseHistory.Add(new ActionHistory.Delete(note)); } else { Debug.Log("Deleted " + note + " at position " + note.tick + " with hold-right left-click shortcut"); editor.actionHistory.Insert(new ActionHistory.Delete(note)); } note.Delete(); } } }
public override void OnSelectableMouseDown() { if (Toolpane.currentTool == Toolpane.Tools.Cursor && Globals.applicationMode == Globals.ApplicationMode.Editor && Input.GetMouseButtonDown(0) && !Input.GetMouseButton(1)) { // Shift-clicking // Find the closest object already selected // Select all objects in range of that found and the clicked object if (Globals.viewMode == Globals.ViewMode.Chart && (Globals.modifierInputActive || Globals.secondaryInputActive)) { // Ctrl-clicking if (Globals.modifierInputActive) { if (editor.IsSelected(songObject)) { editor.RemoveFromSelectedObjects(songObject); } else { editor.AddToSelectedObjects(songObject); } } // Shift-clicking else { int pos = SongObjectHelper.FindClosestPosition(this.songObject, editor.currentSelectedObjects); if (pos != SongObjectHelper.NOTFOUND) { uint min; uint max; if (editor.currentSelectedObjects[pos].tick > songObject.tick) { max = editor.currentSelectedObjects[pos].tick; min = songObject.tick; } else { min = editor.currentSelectedObjects[pos].tick; max = songObject.tick; } editor.currentSelectedObjects = SongObjectHelper.GetRangeCopy(editor.currentChart.chartObjects, min, max); } } } else if (!editor.IsSelected(songObject)) { editor.currentSelectedObject = songObject; } } // Delete the object on erase tool or by holding right click and pressing left-click else if (Globals.applicationMode == Globals.ApplicationMode.Editor && ( (Toolpane.currentTool == Toolpane.Tools.Eraser && Input.GetMouseButtonDown(0)) || (Input.GetMouseButtonDown(0) && Input.GetMouseButton(1)) || Eraser.dragging) ) { if ((songObject.classID != (int)SongObject.ID.BPM && songObject.classID != (int)SongObject.ID.TimeSignature) || songObject.tick != 0) { if (!Input.GetMouseButton(1)) { Debug.Log("Deleted " + songObject + " at position " + songObject.tick + " with eraser tool"); Eraser.dragEraseHistory.Add(new ActionHistory.Delete(songObject)); } else { Debug.Log("Deleted " + songObject + " at position " + songObject.tick + " with hold-right left-click shortcut"); editor.actionHistory.Insert(new ActionHistory.Delete(songObject)); } songObject.Delete(); editor.currentSelectedObject = null; } } }