Beispiel #1
0
        public void AddArcTap(ArcArcTap arctap)
        {
            if (arctap.Timing > EndTiming || arctap.Timing < Timing)
            {
                throw new ArgumentOutOfRangeException("ArcTap 时间不在 Arc 范围内");
            }
            ArcTimingManager timingManager = ArcTimingManager.Instance;
            int offset = ArcAudioManager.Instance.AudioOffset;

            arctap.Instantiate(this);
            float t = 1f * (arctap.Timing - Timing) / (EndTiming - Timing);

            arctap.LocalPosition = new Vector3(ArcAlgorithm.ArcXToWorld(ArcAlgorithm.X(XStart, XEnd, t, LineType)),
                                               ArcAlgorithm.ArcYToWorld(ArcAlgorithm.Y(YStart, YEnd, t, LineType)) - 0.5f,
                                               -timingManager.CalculatePositionByTimingAndStart(Timing + offset, arctap.Timing + offset, TimingGroup) / 1000f - 0.6f);
            ArcTaps.Add(arctap);
        }
Beispiel #2
0
 public RemoveArcTapCommand(ArcArc arc, ArcArcTap arctap)
 {
     this.arc    = arc;
     this.arctap = arctap;
 }
Beispiel #3
0
 public AddArcTapCommand(ArcArc arc, ArcArcTap arctap)
 {
     this.arc    = arc;
     this.arctap = arctap;
 }
Beispiel #4
0
 public void RemoveArcTap(ArcArcTap arctap)
 {
     arctap.Destroy();
     ArcTaps.Remove(arctap);
 }
Beispiel #5
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;
            }
        }