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); }
public RemoveArcTapCommand(ArcArc arc, ArcArcTap arctap) { this.arc = arc; this.arctap = arctap; }
public AddArcTapCommand(ArcArc arc, ArcArcTap arctap) { this.arc = arc; this.arctap = arctap; }
public void RemoveArcTap(ArcArcTap arctap) { arctap.Destroy(); ArcTaps.Remove(arctap); }
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; } }