/// <summary> /// Hold, Slideを配置します。 /// 終端ノーツにAirやAirHoldが付随していた場合、それらも配置します。 /// </summary> public bool Put(LongNote longNote) { if (longNote == null) { Logger.Error("ロングノーツを追加できません。引数がnullです。", true); return(false); } switch (longNote) { case Hold hold: { holdNotes.Add(hold); HoldEnd end = hold.EndNote as HoldEnd; if (end == null) { Logger.Warn("EndNoteがnullでした。"); break; } if (end.IsAirAttached) { airNotes.Add(end.Air); } if (end.IsAirHoldAttached) { airHoldNotes.Add(end.AirHold); } } break; case Slide slide: { slideNotes.Add(slide); SlideEnd end = slide.EndNote as SlideEnd; if (end == null) { Logger.Warn("EndNoteがnullでした。"); break; } if (end.IsAirAttached) { airNotes.Add(end.Air); } if (end.IsAirHoldAttached) { airHoldNotes.Add(end.AirHold); } } break; default: { Logger.Warn("不適切なロングノーツを追加できません。", true); return(false); } } return(true); }
public Hold(int size, Position pos, PointF location, int laneIndex) { HoldBegin holdBegin = new HoldBegin(size, pos, location, laneIndex); holdBegin.CheckNotePosition += CheckNotePosition; holdBegin.CheckNoteSize += CheckNoteSize; Add(holdBegin); location.Y -= ScoreInfo.UnitBeatHeight * ScoreInfo.MaxBeatDiv / Status.Beat; HoldEnd holdEnd = new HoldEnd(size, pos.Next(), location, laneIndex); holdEnd.CheckNotePosition += CheckNotePosition; holdEnd.CheckNoteSize += CheckNoteSize; holdEnd.IsPositionAvailable += IsPositionTickAvailable; Add(holdEnd); Status.SelectedNote = holdEnd; }