Exemple #1
0
    public void MirrorSelectedNotes()
    {
        var             selected = AdeCursorManager.Instance.SelectedNotes;
        List <ICommand> commands = new List <ICommand>();

        foreach (var n in selected)
        {
            switch (n)
            {
            case ArcTap tap:
                ArcTap newtap = tap.Clone() as ArcTap;
                newtap.Track = 5 - newtap.Track;
                commands.Add(new EditArcEventCommand(tap, newtap));
                break;

            case ArcHold hold:
                ArcHold newhold = hold.Clone() as ArcHold;
                newhold.Track = 5 - newhold.Track;
                commands.Add(new EditArcEventCommand(hold, newhold));
                break;

            case ArcArc arc:
                ArcArc newarc = arc.Clone() as ArcArc;
                newarc.XStart = 1 - newarc.XStart;
                newarc.XEnd   = 1 - newarc.XEnd;
                if (newarc.Color < 2)
                {
                    newarc.Color = 1 - newarc.Color;
                }
                commands.Add(new EditArcEventCommand(arc, newarc));
                break;
            }
        }
        CommandManager.Instance.Add(new BatchCommand(commands.ToArray(), "镜像"));
    }
Exemple #2
0
 private void PostCreateHoldNote(ArcHold note)
 {
     if (postHoldCoroutine != null)
     {
         StopCoroutine(postHoldCoroutine);
     }
     postHoldCoroutine = StartCoroutine(PostCreateHoldNoteCoroutine(note));
 }
Exemple #3
0
 private IEnumerator PostCreateHoldNoteCoroutine(ArcHold note)
 {
     AdeTimingSelector.Instance.ModifyNote(note, (a) => { note.EndTiming = a; });
     while (AdeTimingSelector.Instance.Enable)
     {
         yield return(null);
     }
     CommandManager.Instance.Commit();
     pendingNote       = null;
     postHoldCoroutine = null;
 }
 public void OnTrack(InputField inputField)
 {
     if (!canEdit)
     {
         return;
     }
     try
     {
         string t     = inputField.text;
         int    track = int.Parse(t);
         if (track <= 0 || track >= 5)
         {
             throw new InvalidDataException("轨道只能为 1 - 4");
         }
         List <EditArcEventCommand> commands = new List <EditArcEventCommand>();
         foreach (var n in AdeCursorManager.Instance.SelectedNotes)
         {
             if (n is ArcTap)
             {
                 ArcTap ne = n.Clone() as ArcTap;
                 ne.Track = track;
                 commands.Add(new EditArcEventCommand(n, ne));
             }
             else if (n is ArcHold)
             {
                 ArcHold ne = n.Clone() as ArcHold;
                 ne.Track = track;
                 commands.Add(new EditArcEventCommand(n, ne));
             }
         }
         if (commands.Count == 1)
         {
             CommandManager.Instance.Add(commands[0]);
         }
         else if (commands.Count > 1)
         {
             CommandManager.Instance.Add(new BatchCommand(commands.ToArray(), "批量修改 Note"));
         }
     }
     catch (Exception Ex)
     {
         AdeToast.Instance.Show("赋值时出现错误");
         Debug.LogException(Ex);
     }
 }
Exemple #5
0
 public void Remove(ArcHold hold)
 {
     hold.Destroy();
     Holds.Remove(hold);
 }
Exemple #6
0
 public void Add(ArcHold hold)
 {
     hold.Instantiate();
     Holds.Add(hold);
 }
Exemple #7
0
        private void AddNoteHandler()
        {
            if (!AdeCursorManager.Instance.IsHorizontalHit)
            {
                return;
            }
            if (skipNextClick)
            {
                skipNextClick = false;
                return;
            }
            Vector3 pos    = AdeCursorManager.Instance.AttachedHorizontalPoint;
            int     timing = ArcTimingManager.Instance.CalculateTimingByPosition(-pos.z * 1000) - ArcAudioManager.Instance.AudioOffset;
            ArcNote note   = null;

            switch (Mode)
            {
            case ClickToCreateMode.Tap:
                note = new ArcTap()
                {
                    Timing = timing, Track = PositionToTrack(pos.x)
                };
                break;

            case ClickToCreateMode.Hold:
                note = new ArcHold()
                {
                    Timing = timing, Track = PositionToTrack(pos.x), EndTiming = timing
                };
                break;

            case ClickToCreateMode.Arc:
                note = new ArcArc()
                {
                    Timing = timing, EndTiming = timing, Color = currentArcColor, IsVoid = currentArcIsVoid, LineType = currentArcType
                };
                break;

            case ClickToCreateMode.ArcTap:
                note = new ArcArcTap()
                {
                    Timing = timing
                };
                break;
            }
            if (note == null)
            {
                return;
            }
            switch (Mode)
            {
            case ClickToCreateMode.Tap:
                CommandManager.Instance.Add(new AddArcEventCommand(note));
                break;

            case ClickToCreateMode.Hold:
            case ClickToCreateMode.Arc:
                CommandManager.Instance.Prepare(new AddArcEventCommand(note));
                break;

            case ClickToCreateMode.ArcTap:
                if (canAddArcTap)
                {
                    CommandManager.Instance.Add(new AddArcTapCommand(selectedArc, note as ArcArcTap));
                }
                else
                {
                    if (selectedArc != null)
                    {
                        selectedArc = null;
                        Mode        = ClickToCreateMode.Idle;
                    }
                }
                break;
            }
            if (note is ArcLongNote)
            {
                pendingNote = note as ArcLongNote;
            }
            switch (Mode)
            {
            case ClickToCreateMode.Hold:
                PostCreateHoldNote(note as ArcHold);
                break;

            case ClickToCreateMode.Arc:
                PostCreateArcNote(note as ArcArc);
                break;
            }
        }