/// <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 Slide(int size, Position pos, PointF location, int laneIndex) { SlideBegin slideBegin = new SlideBegin(size, pos, location, laneIndex); Add(slideBegin); location.Y -= ScoreInfo.UnitBeatHeight * ScoreInfo.MaxBeatDiv / Status.Beat; SlideEnd slideEnd = new SlideEnd(size, pos.Next(), location, laneIndex); Add(slideEnd); Status.SelectedNote = slideEnd; }
private bool Add(SlideEnd slideEnd) { if (!IsPositionTickAvailable(slideEnd, slideEnd.Position)) { Status.SelectedNote = null; return(false); } base.Add(slideEnd); slideEnd.IsPositionAvailable += IsPositionTickAvailable; return(true); }