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));
        }
    }
Exemple #2
0
    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();
            }
        }
    }
Exemple #3
0
    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;
            }
        }
    }